Chrome本机消息传递,与本机消息传递主机通信时出错

时间:2019-02-11 07:17:25

标签: c# google-chrome-extension chrome-native-messaging

我正在尝试使用Chrome扩展本机消息传递功能。我运行了C#程序,它将使用标准输出写入数据。在chrome扩展程序background.js文件中,从未触发chrome.runtime.onConnectExternal.addListener()。 在Chrome扩展程序页面中,出现以下错误:

  Unchecked runtime.lastError: Error when communicating with the native messaging host.
    Context_generated_background_page.html
    Stack Trace
    _generated_background_page.html:0 (anonymous function)

以下是有关测试项目的信息。

  1. C#应用程序。该方法甚至在应用程序中触发后也会被调用。

    public static void Write(JToken data)
    {
        var json = new JObject();
        json["data"] = data;
    
        var bytes = System.Text.Encoding.UTF8.GetBytes(json.ToString(Formatting.None));
        /*
        foreach (var b in bytes)
            Console.WriteLine(b);
            */
        var stdout = Console.OpenStandardOutput();
        stdout.WriteByte((byte)((bytes.Length >> 0) & 0xFF));
        stdout.WriteByte((byte)((bytes.Length >> 8) & 0xFF));
        stdout.WriteByte((byte)((bytes.Length >> 16) & 0xFF));
        stdout.WriteByte((byte)((bytes.Length >> 24) & 0xFF));
        stdout.Write(bytes, 0, bytes.Length);
        stdout.Flush();
    }
    
  2. background.js(更新1)

    var port = chrome.runtime.connectNative('applistener');
    port.onMessage.addListener(function(msg) {
      console.log("Received" + msg);
    });
    
    port.onDisconnect.addListener(function() {
      console.log("Disconnected");
    });
    
  3. Chrome扩展清单文件(manifest.json)。

     "permissions": [ "nativeMessaging","activeTab", "declarativeContent", "storage"],
    
  4. 本机应用程序清单文件。(almanifest.json)

    {
      "name": "applistener",
      "description": "Chrome native messaging test",
      "path": "C:\\Users\\xyz\\_test\\AppListener\\AppListener\\bin\\Release\\AppListener.exe",
      "type": "stdio",
      "allowed_origins": [ "chrome-extension://xxxxxmanextensionidxxxxxx/"]
    

    }

  5. 创建注册表项。 遵循了来自{https://developer.chrome.com/extensions/nativeMessaging#native-messaging-host-location

  6. 的指示

我可以从Computer \ HKEY_CURRENT_USER \ Software \ Google \ Chrome \ NativeMessagingHosts \ applistener中看到密钥

我假设当事件在本机应用中触发时,在chrome扩展程序background.js中,应触发监听器事件。但是我没有看到那个事件被触发。

Update1: 使用Google文档中的代码示例更改background.js中的代码。触发了port.onDisconnect.addListener()事件,仍然显示错误:

     Unchecked runtime.lastError: Error when communicating with the native messaging host.

我现在正在尝试缩小问题范围。我猜我的注册表项设置正确吗?问题并在本机应用程序中写入方法?

0 个答案:

没有答案