代码如下
public class CefBrowerMgr
{
public static readonly CefBrowerMgr Instance = new CefBrowerMgr();
public CefBrowerMgr()
{
this.ChromeBrowerInit();
}
protected ChromiumWebBrowser ChromiumWebBrowser;
private void ChromeBrowerInit()
{
CefSharpSettings.LegacyJavascriptBindingEnabled = true;
CefSettings settings = new CefSettings();
settings.CefCommandLineArgs.Add("--disable-web-security","1");
//去除生成的debug.log
//settings.LogSeverity = LogSeverity.Disable;
settings.Locale = "zh-CN";
settings.AcceptLanguageList = "zh-CN";
Cef.Initialize(settings);
Cef.EnableHighDPISupport();
string url = "https://www.icloud.com/";
ChromiumWebBrowser = new ChromiumWebBrowser(url);
//禁用弹窗
ChromiumWebBrowser.LifeSpanHandler = new LifeSpanHandler();
//禁用右键菜单
ChromiumWebBrowser.MenuHandler = new MenuHandler();
//构造要注入的对象,参数为当前线程的调度上下文
//注册C#对象
ChromiumWebBrowser.JavascriptObjectRepository.Register("cSharpChannel", new ScriptCallChannel(), false, CefSharp.BindingOptions.DefaultBinder);
}
public ChromiumWebBrowser GetWebBrowser()
{
return this.ChromiumWebBrowser;
}
public void SetUrl(string url)
{
this.ChromiumWebBrowser.Address = url;
}
/// <summary>
/// 调用JavaScript方法
/// </summary>
/// <param name="funcName">方法名称</param>
/// <param name="args">参数</param>
public void ExecuJsFunc(string funcName, string args)
{
this.ChromiumWebBrowser.GetMainFrame().ExecuteJavaScriptAsync($"{funcName}('{args}')");
}
public void ExecuJs(string js)
{
this.ChromiumWebBrowser.GetMainFrame().ExecuteJavaScriptAsync(js);
}
}
完整代码见底部链接
执行JS代码
通过GetMainFrame().ExecuteJavaScriptAsync(js)来执行js代码。在实际使用中可以通过读取js文件,获取文件代码来执行,方便调试及修改。
注意事项
1.执行js代码时间必须等页面加载完成后才可以
2.建议在task中执行js代码
Js调用C#
Js调用C#必须将 CefSharpSettings.LegacyJavascriptBindingEnabled = true;最新的版本设置方式为ChromiumWebBrowser.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
Js调用前必须进行C#对象注册。ChromiumWebBrowser.JavascriptObjectRepository.Register(“cSharpChannel”, new ScriptCallChannel(), false, CefSharp.BindingOptions.DefaultBinder);
注意事项
1.C#对象中方法首字母建议小写
2.Js中调用方法首字母必须小写