Собственные сообщения Chrome, Ошибка при общении с собственным узлом обмена сообщениями - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь использовать встроенную функцию обмена сообщениями расширения 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

И я вижу ключ от Computer \ HKEY_CURRENT_USER \ Software \ Google \ Chrome \ NativeMessagingHosts \ applistener

Я предполагаю, что при возникновении событияв собственном приложении в расширении chrome background.js должно быть запущено событие слушателя.Но я не видел, чтобы это событие сработало.

Update1: измените код в background.js, используя пример кода из документации Google.Событие port.onDisconnect.addListener () сработало, но все равно получаю сообщение об ошибке:

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

В данный момент я пытаюсь сузить проблему.Я полагаю, мой параметр реестра правильный?а метод записи в нативном приложении это проблема?

...