要在 CEF 中和网页的 JS 进行交互, 首先我们要通过设置启用 Javascrit 集成功能.
CefSharpSettings.LegacyJavascriptBindingEnabled= true;
调用 JavaScript:
简单的调用 JavaScript 可以直接使用 ExecuteScriptAsync 扩展函数.
_chrome.ExecuteScriptAsync("alert('hello world')");
实际上, JavaScript 是具体到 frame 的, 上述代码等价于
_chrome.GetMainFrame().ExecuteJavaScriptAsync("alert('hello world')");
调用 JavaScript 返回值:
我们也可以使用 EvaluateScriptAsync 扩展函数执行 JavaScript 并获取返回值.
- varrsp = await_chrome.EvaluateScriptAsync("3+2*5");
- if(rsp.Success)
- {
- MessageBox.Show(rsp.Result.ToString());
- }
也可以具体到 frame:
_chrome.GetMainFrame().EvaluateScriptAsync("3+2*5")
JavaScript 回调:
要 JavaScript 回调, 首先得注入一个对象.
- publicclassAsyncBoundObject
- {
- publicintDiv(intdivident, intdivisor)
- {
- returndivident / divisor;
- }
- }
- _chrome= newChromiumwebBrowser();
- _chrome.RegisterAsyncJsObject("cef", newAsyncBoundObject());
- _chrome.Address= "http://tianfang.cnblogs.com";
注意: 这个注入得再加载网页之前, 否则可能网页无法加载注入的 JS.
注入的函数是异步返回的, 因此返回的是一个 Promise 对象, 我们调用的时候可以使用 ES6 的 await 方式.
awaitcef.div(4, 2)
关于 JS 注入更多信息, 可以参看这个网页. how-do-you-expose-a.NET-class-to-JavaScript
来源: http://www.bubuko.com/infodetail-2915092.html