【问题标题】:CefSharp - Invalid (?) data returned from the C# method to JSCefSharp - 从 C# 方法返回到 JS 的无效 (?) 数据
【发布时间】:2018-04-13 23:28:39
【问题描述】:

我对从 C# 返回到 JS 的数据有问题。 CefSharp 配置:

        Cef.Initialize();
        CefSharpSettings.WcfEnabled = true;
        CefSharpSettings.LegacyJavascriptBindingEnabled = true;
        browser = new ChromiumWebBrowser("")
        {
            Dock = DockStyle.Fill
        };
        this.Controls.Add(browser);
        SM = new ScriptManager(browser);
        browser.RegisterAsyncJsObject("external", SM); //"Support" for C# methods from JavaScript

我正在尝试从 JS 调用 C# 方法:

...
var UserID_array = window.external.loadUsrIDs(usr_names); //usr_name -> array of user names

在C#中方法的声明如下:

class ScriptManager
{
  ...

  public int[] loadUsrIDs(object usr_names = null) //by default if usr_names == null then return all user IDs
  {
    ...//reading the database

   return id_users.ToArray();   //from List<int> to int[]
  }

}

不幸的是,我总是得到以下值([object Promise])而不是 Int 数组(int[]) - 测试代码:

var UserID_array = window.external.loadUsrIDs(usr_names);
alert(UserID_array); //alert - only for tests

//Alert function always return value: **[object Promise]**

如何在 JS 中通过 C# 方法访问返回的数据?

问候

马辛

【问题讨论】:

标签: javascript c# .net chromium-embedded cefsharp


【解决方案1】:

尝试使用

var UserID_array = await window.external.loadUsrIDs(usr_names);

【讨论】:

    【解决方案2】:

    您需要等待响应。

    调用 C# 函数后,将结果分配给变量(就像您已经完成的那样)。

    然后使用 then(success,failure) 功能来消费数据。

    var UserID_array = window.external.loadUsrIDs(usr_names);
    
    UserID_array.then(
        function(result) {
            doSomethingWithYourData(result);            
        }, function (err) { 
            console.log(err); 
        });
    

    这使您的页面响应速度更快,允许用户界面在等待您的数据时继续响应您的用户。

    【讨论】:

      猜你喜欢
      • 2019-07-20
      • 2018-01-09
      • 1970-01-01
      • 2018-01-27
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多