C#使用webkit与JS交互

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。

网络上此类教程几乎都是抄来抄去,至少我依照网上教程未能实现成功交互。现将调试成功的步骤整理如下,略去了项目的代码。

工具与环境

准备工作

需要的项目文件

  • open-webkit-sharp/core下的所有文件
  • open-webkit-sharp/Binary下的所有文件
  • 上述文件放入bin/debug目录下

项目环境配置

  • 工程引用WebKit.Interop.dll、OpenWebKitSharp.dll和JSCore.dll三个文件

使用方法

初始化webkitBrowser

  • 全局定义webkitBrowser
WebKit.WebKitBrowser webKitBrowser;
  • 在form_Load中初始化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");

使用webKitBrowser打开本地页面

webkit属于linux风格,打开本地文件时使用file:///的格式

webKitBrowser.Navigate("file:///f:/index.html");

如果线程访问页面,需使用this.Invoke((EventHandler)(delegate{webKitBrowser.Navigate(url);}));

重点:与页面的js交互

页面的JS函数调用C#的函数

webkit需要对要调用的类进行设置

  1. 对类设置COM+组件可见
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[ComVisible(true)]//COM+组件可见
  1. 在webKitBrowser_DocumentCompleted需加入指定的代码
private void mainWeb_DocumentCompleted(object sender, webBrowserDocumentCompletedEventArgs e)
{
	mainWeb.GetScriptManager.ScriptObject = this;//设置脚本对象
	mainWeb.GetScriptManager.EvaluateScript("var obj=window.external;");//设置脚本前缀兼容webbrowser的写法
}
  1. 在js中的调用C#提供的方法,可直接传参,非常方便
var info = window.external.getInfo();
var info = window.external.getInfo("info");
C#调用JS提供的函数

试了网上的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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐