天天看點

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