C#内置的浏览器webbrowser使用IE内核,对http标准支持较差。可使用webkit作为内置浏览器,替代webbrowser。
C#版本的webkit目前有两个开源库:WebKit.NET-0.5-bin-cairo和open-webkit-sharp,前者最后一次更新是2010年,后者最后一次更新在2013年。
WebKit.NET-0.5测试后没能与JS交互成功,以下说明是基于open-webkit-sharp。
网络上此类教程几乎都是抄来抄去,至少我依照网上教程未能实现成功交互。现将调试成功的步骤整理如下,略去了项目的代码。
WebKit.WebKitBrowser webKitBrowser;
webKitBrowser = new WebKit.WebKitBrowser();
webKitBrowser.Dock = DockStyle.Fill;
this.Controls.Add(webKitBrowser);
webKitBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webKitBrowser_DocumentCompleted);
此时已经可以使用webKitBrowser打开指定网页了
webKitBrowser.Navigate("http://www.baidu.com");
webkit属于linux风格,打开本地文件时使用file:///的格式
webKitBrowser.Navigate("file:///f:/index.html");
如果线程访问页面,需使用this.Invoke((EventHandler)(delegate{webKitBrowser.Navigate(url);}));
webkit需要对要调用的类进行设置
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[ComVisible(true)]//COM+组件可见
private void mainWeb_DocumentCompleted(object sender, webBrowserDocumentCompletedEventArgs e)
{
mainWeb.GetScriptManager.ScriptObject = this;//设置脚本对象
mainWeb.GetScriptManager.EvaluateScript("var obj=window.external;");//设置脚本前缀兼容webbrowser的写法
}
var info = window.external.getInfo();
var info = window.external.getInfo("info");
试了网上的N种方法,摸索找到的有效方法,与webbrowser调用极其类似
object[] objects = new object[2];
objects[0] = "param1";
objects[1] = "param2";
mainWeb.GetScriptManager.CallFunction("callJSFunction", objects);
DEMO下载链接https://download.csdn.net/download/flyer822/10993114