【发布时间】:2017-02-15 17:36:07
【问题描述】:
我正在尝试在 OSX 上的 chrome 扩展程序和电子应用程序之间建立通信。
我在~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.company.app.json 中有 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 扩展上,我有一个简单的本地消息调用:
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 时,我在日志中看不到任何内容。我在这里缺少什么吗?
【问题讨论】:
-
猜测:由于message starts with a 32-bit binary length 的第一个字节是短消息的 0,因此您应该以二进制模式读取,否则它可能会被 readline 解释为字符串的标准结尾。
-
@wOxxOm 有趣的是我会试一试。我的猜测是电子方面有问题,default_app.asar 看起来很可疑,在其他示例中它似乎指向一个 .js 文件。不确定这是否重要。
-
@john_ryan 你做到了吗?
-
@jonathanwiesel 不完全是,我最终在电子应用程序中启动了一个 http 服务器,然后只是发布到本地服务器
-
@john_ryan 您是否使用electronify-server 来启动本地网络服务器?如果没有,您是否有一些示例代码愿意分享您如何让本地服务器在电子中运行以与 Chrome 扩展程序通信? ???谢谢。
标签: google-chrome-extension stdin electron stdio chrome-native-messaging