如何将消息从用 Node.js 编写的本机应用程序发送到 Chrome 扩展程序?
How to send message from native app written in Node.js to Chrome extension?
这个问题是 that one 的延续,因为那个问题已经 6 年没有用 Nodejs 代码回答了。
我在 windows 10 中使用 Chrome 79 和 Nodejs 13。
我有一个 Nodejs 脚本(见下文)充当本机消息传递主机,还有一个 Chrome 扩展。
我想从 Nodejs 脚本向我的分机发送消息。
我知道如何在我的 Chrome 分机中接收消息 - 这是它的 background.js:
var port = chrome.runtime.connectNative('my_messaging_host');
port.onMessage.addListener((message) => {
console.log("Received: " + message);
});
我拥有的 Nodejs 脚本(见下文)是本机消息传递主机。我将我能找到的唯一 Nodejs 消息传递主机代码示例用作参考,from MDN.
我注意到这个 Nodejs 代码示例是在 10 天前最近添加到 MDN wiki 页面中的,它 有 issues/needs 改进.
无论如何,我已经按如下方式对其进行了修改,但是在发送消息时我的扩展程序出现了以下错误:Failed to connect: Error when communicating with the native messaging host
,根据文档 表示不正确在本机消息传递主机中实现通信协议。
那么,为什么我的 Nodejs 脚本不能正常工作?
你能给我一个有效的 Nodejs 主机代码示例吗?
function sendMessage(msg) {
var buffer = Buffer.from(JSON.stringify(msg));
var header = Buffer.alloc(4);
header.writeUInt32LE(buffer.length, 0);
var data = Buffer.concat([header, buffer]);
process.stdout.write(data);
}
供参考,各种本机消息传递主机示例:
- Google Native Messaging docs:在Python。
- MDN Native Messaging docs:在 Nodejs 和 Python 2 & 3 中,
- 作为上述 question 的答案:C、C++、C# 和 Python。
我已经修复了 MDN wiki 页面中的 sendMessage
函数,如下所示,即:
- 无需通过将 string/wrongly 字符串化为 JSON、
msg
来分配新的 Buffer
- header 的 4 个字节中的第一个字节(在 little-endian 中转换)应该采用给定
msg
的长度作为 string
-
msg
应该按原样使用 stout 发送,即 string
function sendMessage(msg) {
var header = Buffer.alloc(4);
header.writeUInt32LE(msg.length, 0);
process.stdout.write(header);
process.stdout.write(msg);
}
此外,这里是要发送的示例消息:
sendMessage('{"test": "content"}');
PS:我还用它更新了那个 MDN wiki 页面。
这个问题是 that one 的延续,因为那个问题已经 6 年没有用 Nodejs 代码回答了。
我在 windows 10 中使用 Chrome 79 和 Nodejs 13。
我有一个 Nodejs 脚本(见下文)充当本机消息传递主机,还有一个 Chrome 扩展。
我想从 Nodejs 脚本向我的分机发送消息。
我知道如何在我的 Chrome 分机中接收消息 - 这是它的 background.js:
var port = chrome.runtime.connectNative('my_messaging_host');
port.onMessage.addListener((message) => {
console.log("Received: " + message);
});
我拥有的 Nodejs 脚本(见下文)是本机消息传递主机。我将我能找到的唯一 Nodejs 消息传递主机代码示例用作参考,from MDN.
我注意到这个 Nodejs 代码示例是在 10 天前最近添加到 MDN wiki 页面中的,它 有 issues/needs 改进.
无论如何,我已经按如下方式对其进行了修改,但是在发送消息时我的扩展程序出现了以下错误:Failed to connect: Error when communicating with the native messaging host
,根据文档 表示不正确在本机消息传递主机中实现通信协议。
那么,为什么我的 Nodejs 脚本不能正常工作?
你能给我一个有效的 Nodejs 主机代码示例吗?
function sendMessage(msg) {
var buffer = Buffer.from(JSON.stringify(msg));
var header = Buffer.alloc(4);
header.writeUInt32LE(buffer.length, 0);
var data = Buffer.concat([header, buffer]);
process.stdout.write(data);
}
供参考,各种本机消息传递主机示例:
- Google Native Messaging docs:在Python。
- MDN Native Messaging docs:在 Nodejs 和 Python 2 & 3 中,
- 作为上述 question 的答案:C、C++、C# 和 Python。
我已经修复了 MDN wiki 页面中的 sendMessage
函数,如下所示,即:
- 无需通过将 string/wrongly 字符串化为 JSON、
msg
来分配新的 - header 的 4 个字节中的第一个字节(在 little-endian 中转换)应该采用给定
msg
的长度作为 string -
msg
应该按原样使用 stout 发送,即 string
Buffer
function sendMessage(msg) {
var header = Buffer.alloc(4);
header.writeUInt32LE(msg.length, 0);
process.stdout.write(header);
process.stdout.write(msg);
}
此外,这里是要发送的示例消息:
sendMessage('{"test": "content"}');
PS:我还用它更新了那个 MDN wiki 页面。