使用CefSharp将字符串/JSON从C#传到JS

我有一个 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签名。

有没有办法做到这一点?

为了记录,我实际上试图传递一长串单词以用于自动完成目的,因此它不会只是一个简单的“字符串”。


繁星coding
浏览 327回答 1
1回答

慕沐林林

您的代码中的问题: 您没有正确注册 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 是正在传递的参数。希望这可以帮助。
打开App,查看更多内容
随时随地看视频慕课网APP