CefSharp内核浏览器之C#与js的互相调用
js调用C#方法
1.注册js调用对象
这是新版的注册方法,旧注册方法已经过时,官方已经抛弃,所以按照最新的写法,详情请查看https://github.com/cefsharp/CefSharp/issues/2990
//旧方法,官方已经抛弃
browser.RegisterJsObject("bound", new BoundObject(), options: BindingOptions.DefaultBinder);
//新方法,直接复制下面的就行
CefSharpSettings.LegacyJavascriptBindingEnabled = true;
CefSharpSettings.WcfEnabled = true;
browser.JavascriptObjectRepository.Register("jsEvent", new JsEvent(tbUrl), isAsync: false, options: BindingOptions.DefaultBinder);
注意该段代码要写在浏览器加入控件之前,否则网页会调用不到,报找不到方法的错误。我之前就是没有注意到,搞了大半天,没有调用成功。
比如下面的例子
browser.JavascriptObjectRepository.Register("jsEvent", new JsEvent(tbUrl), isAsync: false, options: BindingOptions.DefaultBinder);
this.splitContainer1.Panel1.Controls.Add(browser);
browser.Dock = DockStyle.Fill;
2.创建JS类
在第一步中我们注册对象使用了JsEvent()类
所以我们要创建一个类来存放js需要调用的方法
public class JsEvent
{
TextBox url;
public JsEvent(TextBox tbUrl)
{
url = tbUrl;
}
//获取TextBox的内容
public string getSrc()
{
return url.Text ";
}
}
3. HTML网页js调用
function GetCef() {
//控制台打印数据,验证一下
console.log(jsEvent.getSrc());
return jsEvent.getSrc();
}
做到这一步,一般来说js已经能正确的调用C#中的方法了。
C#调用js方法
C# 调用js就比较简单了,参照以下代码
1. html写法
加入一个id为 btn_play 的按钮
<button id="btn_play" >播放</button>
在script方法中实现 btn_play 的点击事件
<script type="text/javascript">
$(function() {
$("#btn_play").click(function(){
var txt = GetCef();
console.log("button.play---"+txt);
});
});
</script>
2. C#调用
//chromium browser
browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('btn_play').click();");
经过上面的操作,我们就可以在C#中调用js方法了。是不是很简单。