最近在做一个小工具,期间有个功能需要嵌入一个网页,自然而然地先用自带控件WebBrowser,结果运行一看,黑屏。经查证,原来该网页不支持所有版本的IE(哈哈,得多嫌弃IE啊),而WebBrowser并不支持其他内核,于是乎,只能改变思路,用第三方控件。接下来,就搜到了坑人的WebKit .NET项目(网上大部分的解决方案都是这坑货)。
WebKit .NET下载地址
https://sourceforge.net/projects/webkitdotnet/files/
为什么说它坑呢。
1.已经9年不维护,其内核版本极其老旧
2.引用方式不友好,需要复制一大坨文件到本地目录
QQ截图20190309133550.png
主要是内核版本太久,导致我的网页依然黑屏。
无奈,继续翻页搜索引擎,终于让我遇上了CefSharp.WinForms,CefSharp.WinForms是一个第三方的控件库,可以通过nuget管理,极其方便。
nuget搜索CefSharp.WinForms即可安装
调用示例:
var browser = new CefSharp.WinForms.ChromiumWebBrowser();
browser .Dock = DockStyle.Fill;
this.panel.Controls.Add(Browser);
browser .AddressChanged += Browser_AddressChanged;
browser .Load("http://www.baidu.com");
使用注意事项,ChromiumWebBrowser控件的部分事件并不是在主线程回调的。以AddressChanged这个事件为例,如果需要操作其他控件,需要将调用封送到主线程调用。以下是示例代码:
private void Browser_AddressChanged(object sender, CefSharp.AddressChangedEventArgs e)
{
//OnAddressChanged是一个自定义的委托
this.Invoke(OnAddressChanged);
}
完美解决,可以正常显示。
网友评论