亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用CefSharp將字符串/JSON從C#傳到JS

使用CefSharp將字符串/JSON從C#傳到JS

C#
繁星coding 2022-11-21 16:54:06
我有一個 html 頁面,我想在我的 C# 應用程序 (WPF) 中托管它。因為我需要瀏覽器基于 Chromium,所以我使用的是 cefSharp。我想將字符串數據從 C# 傳遞到 JS 以進行頁面初始化。我發現RegisterJsObject它可以讓我從 JS 訪問 C# 對象,但我似乎無法從中傳遞任何字符串信息。我的代碼目前看起來像這樣:C#:mainWindow.browser.RegisterJsObject("csobj", "a string");記者:... console.log(JSON.stringify(window.csobj)); //I get an empty obj {}我也嘗試過用一個public string GetJson()方法定義我自己的對象,但是 JS 不認為它是一個函數,我猜是因為它需要一個public void簽名。有沒有辦法做到這一點?為了記錄,我實際上試圖傳遞一長串單詞以用于自動完成目的,因此它不會只是一個簡單的“字符串”。
查看完整描述

1 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

您的代碼中的問題: 您沒有正確注冊 Js 對象,這就是您無法在 JS 中獲取對象的原因。


準則:


RegisterJsObject 是注冊你的c#對象,然后從JS調用這些方法,并將值從JS發送到c#。


如果你想將空字符串從 c# 傳遞到你的 HTML 頁面,那么你應該像下面這樣注冊 JS 對象:


您的 C# 類應如下所示:


public class AsyncBoundObject

{

    //We expect an exception here, so tell VS to ignore

    [DebuggerHidden]

    public void Error()

    {

        throw new Exception("This is an exception coming from C#");

    }


    //We expect an exception here, so tell VS to ignore

    [DebuggerHidden]

    public int Div(int divident, int divisor)

    {

        return divident / divisor;

    }

}

然后你可以在 CefSharp 實例中注冊這個類,如下所示:


browser = new ChromiumWebBrowser();

browser.RegisterAsyncJsObject("boundAsync", new AsyncBoundObject()); 

注冊后,您可以從 JS 調用該方法,如下所示。


function asyncDivOk()

{

    var call = "Async call (Divide 16 / 2): " + Date();

    window.boundAsync.div(16, 2).then(function (res)

    {

        var end = "Result: " + res + "(" + Date() + ")";

        writeAsyncResult(call, end);

    });

}

您可以看到 16 和 2 是正在傳遞的參數。


希望這可以幫助。


查看完整回答
反對 回復 2022-11-21
  • 1 回答
  • 0 關注
  • 371 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號