为什么我的 chrome 分机收不到 Node.JS 本机应用程序的任何消息?

Why do I not receive any message from Node.JS Native App to my chrome extension?

我是 chrome 本机消息传递的新手,我想在我的 chrome 扩展程序和本机应用程序之间建立连接。澄清一下,我想从我的分机接收消息,处理它们,然后发回其他消息。但现在我试图从一方面来做。阅读了有关它的所有必要信息后,我遇到了一个问题,即我的分机保持沉默并且不记录收到的(可能)消息。

popup.js:

let port = chrome.runtime.connectNative("com.defus.nodejs");

console.log("Waiting for response...");

port.onMessage.addListener((response) => {
  console.log("Received: " + response);
});

manifest.json(应用):

{
  "name": "com.defus.nodejs",
  "description": "Run Node.JS",
  "path": "./node.bat",
  "type": "stdio",
  "allowed_origins": [
    "chrome-extension://myid/"
  ]
}

node.bat:

@echo off
node ./index.js

index.js (nodejs): — (I tried using the links, but some of them, such as https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging$compare?locale=en-US&to=1595872&from=1593969 来自评论被破坏...)

const header = Buffer.alloc(4);
let message = "something\n";

header.writeUInt32LE(message.length, 0);

process.stdout.write(header);
process.stdout.write(message);

我已经在 regedit 中注册了我的应用程序 Computer\HKEY_CURRENT_USER\SOFTWARE\Google\Chrome\NativeMessagingHosts\com.defus.nodejs,如果我只是启动一个随机应用程序,一切正常。

我试图使用绝对路径,发送 json 对象(和字符串化对象)和其他从 nodejs 应用程序获取消息的各种实现,但没有解决方案没有帮助。我只是收到“等待回复...”,仅此而已。谁能提供简单的例子来说明如何做我需要的事情。

经过一些其他搜索,我似乎找到了解决问题的方法。这是我的步骤:

  1. 感谢 Hüseyin Yağlı's 的回答,我意识到 .bat 文件的名称和命令不应该相同,这可能会导致脚本循环。
  2. 消息必须 JSON 字符串化。

如果不遵守上述规则之一——本机应用程序将无法运行。因此,我将 node.bat 重命名为 index.bat 并尝试发送 let message = JSON.stringify({ message: "something" }); - 它有效。