c# 谷歌内核cefsharp的简单使用以及实现 webBrowser.Navigate(..,post data)类似的功能

最近在尝试做一个简单浏览器,其中需要通过对一个url,post一个json格式的字符串来得到网页。为此,首先尝试了把json格式作为参数与url进行拼接发送,结果却发现得不到我们想要的结果。幸好,vs自带的控件 webBrowser,其中有Navigate(url,… ,post data,…)函数可以直接实现这个功能。可是,没过多久我们就发现,vs自带的 webBrowser是ie内核的,并不支持html5,在后续操作上会出现很大的问题,所以我们不得不寻找谷歌内核的浏览器控件。
通过一番寻找,最后把目标锁定在cefsharp上,发现它可以实现类似于Navigate(url,… ,post data,…)的功能。接下来,就简单的记录下如何解决这一问题。

cefsharp的安装

cefsharp安装,可以直接利用vs联网下载(我是下载cefsharp.winforms.47.0.2.nupkg,查阅很多资料说vs2010不支持较高版本的,所以我用47.0.2,使用中并没有发现什么异常,所以也没有继续深究了),也可以下载离线压缩包,解压到工程debug或者release目录下,直接引用CefSharp.dll,CefSharp.Core.dll,CefSharp.WinForms.dll就可以。
离线包地址:https://download.csdn.net/download/c1149884598/10933630

cefsharp的简单使用

在cefsharp使用中, 不支持anycpu,需要设置成x86或者x64。

      ChromiumWebBrowser browser;    //定义
       this.browser = new ChromiumWebBrowser("http://www.baidu.com");  //初始化
       browser.Back();        //后退
       browser.Forward();   //向前
       browser.Reload();    //刷新
       browser.Load("http://www.baidu.com");//加载网页
        this.panel1.Controls.Add(browser);//显示网页的容器panel

        //注册,与js的交互
       browser.RegisterJsObject("callbackObj", new CallbackObjectForJs());
       //声明的类
       public class CallbackObjectForJs
       {
             public void showMessage(string msg)
             {
                     MessageBox.Show(msg);
             }
      }
      <script type="text/javascript" language="javascript"> 
      
       ///web  html里面的代码 
		function Button_Click()
		{
		    callbackObj.showMessage("hello");
		}

</script>

随后,为了实现post功能,通过查阅大量资料,找到了一段代码,可以进行适当的修改来实现自己的需要。

        public void Navigate(this IWebBrowser browser, string url, byte[] postDataBytes, string contentType)
        {
            IFrame frame = browser.GetBrowser().MainFrame;
            IRequest request = frame.CreateRequest();

            request.Url = url;
            request.Method = "POST";

            request.InitializePostData();
            var element = request.PostData.CreatePostDataElement();
            element.Bytes = postDataBytes;
            request.PostData.AddElement(element);

            NameValueCollection headers = new NameValueCollection();
            headers.Add("Content-Type",contentType);
            request.Headers = headers;

            frame.LoadRequest(request);
        }

此外,如果安装到另外的电脑,发现无法运行程序,可以尝试安装下依赖环境
vcredist_x86.exe.

猜你喜欢

转载自blog.csdn.net/c1149884598/article/details/86605888