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 方法執行完后,獲取返回值

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();

 

出處:https://blog.csdn.net/gong_hui2000/article/details/48155547


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM