1

Я использую Chrome native messaging API для подключения к собственному хосту, который я разрабатываю в Go с помощью Cobra library. Нативное приложение имеет автономный CLI (реализованный с помощью Cobra), а голая команда (без каких-либо аргументов) начинает прослушивать JSON через stdin, который должен быть API для взаимодействия с Chrome.Как вызвать собственный сервер сообщений Chrome без аргументов?

Однако он терпит неудачу каждый раз, когда расширение запрашивает собственный сервер обмена сообщениями (клиент сразу же отключается от процесса). Когда я запускаю Chrome с флагом --enable-logging, я вижу, что собственный хост является ошибкой с unknown command "chrome-extension://cnjopnegooahjdngnkhiokognkdjiioc/" for "--native-app-name--". Это сообщение об ошибке Cobra, которое означает, что в качестве аргумента используется «chrome-extension: // cnjopnegooahjdngnkhiokognkdjiioc /», что, по-видимому, означает, что Chrome вызывает собственный хост с app-name chrome-extension://cnjopnegooahjdngnkhiokognkdjiioc/, а не только app-name.

Вот код, я использую от расширения для вызова родного хоста:

var port = chrome.runtime.connectNative('app-name'); 
port.onMessage.addListener(function(msg) { 
    console.log(msg); 
}); 
port.onDisconnect.addListener(function() { 
    console.log("disconnected"); 
}); 
port.postMessage({cmd:"ping"}); 

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

+0

Это очень полезно, спасибо wOxxOm. Вы знаете, что это документировано где угодно? –

+2

Это процесс документирования, см. Https://codereview.chromium.org/2271143002/ –

+0

@wOxxOm Не могли бы вы отформатировать это в ответ? – Xan

ответ

3

Это часть protocol и не может быть отключена. Командная строка в Windows, что-то вроде этого:

C:\Windows\system32\cmd.exe /c YOURHOSTAPP.exe chrome-extension://.................../ 
--parent-window=6752474 < \\.\pipe\chrome.nativeMessaging.in.e11ed8be274e1a85 
> \\.\pipe\chrome.nativeMessaging.out.e11ed8be274e1a85

первый аргумент нативного хозяина сообщений происхождение абонента, как правило, chrome-extension://[ID of whitelisted extension]. Это позволяет внутренним узлам обмена сообщениями идентифицировать источник сообщения, когда несколько расширений указываются в ключе allowed_origins в манифесте узла native messaging.

В Windows родной хост обмена сообщениями также передается аргумент командной строки с ручкой вызывающему хромированной собственного окна: --parent-window=<decimal handle value>. Это позволяет встроенному узлу обмена сообщениями создавать собственные окна пользовательского интерфейса, которые правильно сфокусированы.


Предупреждение: В Windows, in Chrome 54 and earlier, происхождения было принято в качестве второго параметра вместо первого параметра.