【问题标题】:Passing string/JSON from C# to JS using CefSharp使用 CefSharp 将字符串/JSON 从 C# 传递到 JS
【发布时间】:2019-03-31 13:47:41
【问题描述】:

我有一个 html 页面,我想在我的 C# 应用程序 (WPF) 中托管它。 因为我需要浏览器基于 Chromium,所以我使用的是 cefSharp。

我想将字符串数据从 C# 传递给 JS 以进行页面初始化。

我找到了RegisterJsObject,它可以让我从 JS 访问一个 C# 对象,但我似乎无法从中传递任何字符串信息。

我的代码目前看起来像这样:

C#:

mainWindow.browser.RegisterJsObject("csobj", "a string");

JS:

...
console.log(JSON.stringify(window.csobj)); //I get an empty obj {}

我也尝试使用public string GetJson() 方法定义我自己的对象,但是JS 无法将其识别为函数,我假设是因为它需要public void 签名。

有没有办法做到这一点?

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

【问题讨论】:

    标签: javascript c# json wpf cefsharp


    【解决方案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是正在传递的参数。

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回复!但我似乎无法让您的示例起作用-对我来说它抛出“未捕获的 TypeError:window.boundAsync.div(...).then 不是函数”。知道如何解决这个问题吗?
    • nvm - 这是一个大写问题,完美运行!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 2011-09-09
    相关资源
    最近更新 更多