使用C#与CefSharp相互调用所踩过的坑
第一个坑:
必须在初始化的时候加上这句,注意:值是false,false,false(重要的事情说3遍),意思是不支持旧版绑定模式。
CefSharpSettings.LegacyJavascriptBindingEnabled = false;
第二个坑:
在HTML页面上必须加上这句,其中 bound 是在C#代码里注册对应的name参数。
CefSharp.BindObjectAsync('bound').then(function (result) { bound.SetAutoResetEvent('ID','text'); });
网页调用C#完整的步骤:
第一步:
初始化时加上这句:
CefSharpSettings.LegacyJavascriptBindingEnabled = false;
第二步:
创建调用对象:
public class CallClass { public CallClass() { } public void SetAutoResetEvent(string id,object objResult) { } }
注册对象
CallClass cc=new CallClass(); browser.JavascriptObjectRepository.Register("bound", cc, false);
第三步:
在HTML添加:
CefSharp.BindObjectAsync('bound');
第四步:
在HTML的JS中调用:
bound.SetAutoResetEvent('ID String','ResultString');
C#调用网页完整实例:
var strJs = @" (function(){ try{ alert("执行成功"); }catch(e){ alert("error:"+e.description); } return true; })(); "; var bResult=browser.EvaluateScriptAsync(strJs).Result.Result;
执行完毕后bResult=true