C#使用webkit完成与JS的交互

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

评论 4 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

flyer822

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值