CefSharp 與 js 相互調用

原文: CefSharp 與 js 相互調用

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();
相關文章
相關標籤/搜索