1

Я пытаюсь настроить связь между расширением хрома и электронным приложением на OSX.Chrome Native Messaging с электронным приложением

У меня есть файл в формате JSON в ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.company.app.json

{ 
    "name": "com.company.app", 
    "description": "MyApp", 
    "path": "/Users/johnryan/Desktop/Code/electron-app/node_modules/electron/dist/Electron.app/Contents/Resources/default_app.asar", 
    "type": "stdio", 
    "allowed_origins": ["chrome-extension://xxxxxxxxxxxx"] 
} 

На расширение хром У меня есть простой нативный вызова сообщений:

chrome.runtime.sendNativeMessage('com.company.app', 
    { text: "Hello" }, 
    function(response) { 
    console.log("Received " + response); 
    }); 

затем в main.development.js я есть:

var readline = require('readline'); 
var rl = readline.createInterface({ 
    input: process.stdin, 
    output: process.stdout, 
    terminal: false 
}); 

rl.on('line', function(line){ 
    console.log("RECEIVED:" + line); 
}) 

Однако, когда я выполняю sendNativeMessage Я не вижу никаких в журналах. Здесь что-то не хватает?

+0

Предположение: поскольку [сообщение начинается с 32-битовой двоичной длиной] (HTTPS : //developer.chrome.com/extensions/nativeMessaging#native-messaging-host-protocol) первые байты равны 0 для коротких сообщений, поэтому вы должны читать в двоичном режиме, иначе он может интерпретироваться как стандартный конец строки с помощью readline. – wOxxOm

+0

@wOxxOm Интересно, что я попробую. Я предполагал, что на электронной стороне было что-то не так, default_app.asar казался подозрительным, а в других примерах он, казалось, указывал на файл .js. Не уверен, что это важно. –

+0

@john_ryan вам удалось это сделать? – jonathanwiesel

ответ

0

Недавно наткнулся на эту проблему и выяснил, что на платформе Windows доступ к stdin и stdio из основного потока не поддерживается. Временно я заставил его работать, запустив http-сервер внутри моего электронного приложения и прослушивая порт http на платформе Windows.

Однако то же самое должно работать на MAC OS, просто создайте электронное приложение с помощью электронно-упаковочного устройства и укажите путь вашего exe (exe вашего электронного приложения) в переменной пути, как указано ниже.

{ 
    "name": "com.company.app", 
    "description": "MyApp", 
    "path": "/Users/johnryan/Desktop/Code/electron-app/node_modules/electron/dist/Electron.app/Contents/Resources/default_app.exe", 
    "type": "stdio", 
    "allowed_origins": ["chrome-extension://xxxxxxxxxxxx"] 
} 

Для того, чтобы он работал в окнах см этого поста может иметь решение,

GitHub -Issue of stdin and stdio in electron application