使用CefSharp在.Net程序中嵌入Chrome瀏覽器(五)——Javascript交互
要在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並獲取返回值。
var rsp = await _chrome.EvaluateScriptAsync("3+2*5");
if (rsp.Success)
{
MessageBox.Show(rsp.Result.ToString());
}
也可以具體到frame:
_chrome.GetMainFrame().EvaluateScriptAsync("3+2*5")
JavaScript回調:
要Javascript回調,首先得註入一個對象。
public class AsyncBoundObject
{
public int Div(int divident, int divisor)
{
return divident / divisor;
}
}
_chrome = new ChromiumWebBrowser();
_chrome.RegisterAsyncJsObject("cef", new AsyncBoundObject());
_chrome.Address = "http://tianfang.cnblogs.com";
註意: 這個註入得再加載網頁之前,否則可能網頁無法加載註入的js。
註入的函數是異步返回的,因此返回的是一個Promise對象,我們調用的時候可以使用ES6的await方式。
await cef.div(4, 2)
關於js註入更多信息,可以參看這個網頁。how-do-you-expose-a-net-class-to-javascript
使用CefSharp在.Net程序中嵌入Chrome瀏覽器(五)——Javascript交互