CefSharp 與 js 相互調用
一. CefSharp調用 js
CefSharp.WinForms.ChromiumWebBrowser wb;
...
方式1. ExecuteScriptAsync 方法使用方式與 js 的 eval方法同樣,異步執行,無返回值。
// xxx爲js的方法名稱
wb.ExecuteScriptAsync("xxx()");
// 爲 js 的 變量jsVar賦值 'abc'
wb.ExecuteScriptAsync("jsVar='abc'");
方式2. EvaluateScriptAsync 方法使用方式與 js 的 eval方法同樣,異步執行,有返回值。
Task<CefSharp.JavascriptResponse> t = wb.EvaluateScriptAsync("callTest2()");
// 等待js 方法執行完後,獲取返回值css
t.Wait();
// t.Result 是 CefSharp.JavascriptResponse 對象
// t.Result.Result 是一個 object 對象,來自js的 callTest2() 方法的返回值
if(t.Result.Result != null)
{
MessageBox.Show(t.Result.Result.ToString());
}
二. js 調用 CefSharp的對象
1. 將c#對象註冊爲 js對象
public class JsEvent
{
public string MessageText = string.Empty;
public void ShowTest()
{
MessageBox.Show("this in C#.\n\r" + MessageText);
}
}
...
CefSharp.WinForms.ChromiumWebBrowser wb;
...
// CefSharp 默認的 RegisterJsObject(沒有 camelCaseJavascriptNames 參數),只認小寫字母開始的屬性、方法名稱。
// 使用帶 camelCaseJavascriptNames
參數的 RegisterJsObject,傳入 false,就能識別大寫字母開始的屬性、方法名稱了。 wb.RegisterJsObject("jsObj", new JsEvent(), false); 2. js調用註冊的c#對象 jsObj.MessageText = "hello"; jsObj.ShowTest();