为了账号安全,请及时绑定邮箱和手机立即绑定

使用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 关注
  • 326 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信