Chrome sendNativeMessage: собственное приложение не распознается - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь установить связь между расширением Chrome и собственным процессом Python (у меня есть некоторый опыт работы с Python, но я новичок, когда дело касается Javascript). Я использую следующий пакет Python: https://pypi.org/project/nativemessaging/

На данный момент я желаю, чтобы расширение Chrome отправляло сообщение собственному процессу, а затем регистрировало ответ на консоль.

Для моего файла background.js у меня:

chrome.browserAction.onClicked.addListener(function (tab) {
    
    var port = chrome.runtime.connectNative('com.drubbels.application_name');
    
    port.onMessage.addListener(function(msg) {
      console.log("Received" + msg);
    });
    
    port.onDisconnect.addListener(function() {
      console.log("Disconnected");
    });
    
    port.postMessage({ text: "Hello, host!" });
    
});

На родном Python конце буквально просто:

import nativemessaging

print("Host active...")

while True:
    message = nativemessaging.get_message()
    print('Received', message)
    if message == "hello":
        print("world")
        nativemessaging.send_message(nativemessaging.encode_message("world"))

Хост зарегистрирован на /home/drubbels/.config/google-chrome/NativeMessagingHosts/com.drubbels.application_name.json с:

{
    "name": "com.drubbels.application_name",
    "description": "A test host application for Chrome native messaging",
    "path": "/path/to/host/host.py",
    "type": "stdio",
    "allowed_origins": ["chrome-extension://********************************/"]
}

Щелчок по значку расширения просто приводит к сообщению об ошибке Unchecked runtime.lastError: Native host has exited. На родном конце ничего не происходит.

На самом деле, мне просто нужно минимальный рабочий пример взаимодействия между расширением и собственным процессом Python. Приходит ли это в форме открытого порта или отдельных сообщений, каждый раз явно указывающих имя процесса, не имеет значения.

...