Javascript 试图在Chrome本机消息中使用断开连接的端口

Javascript 试图在Chrome本机消息中使用断开连接的端口,javascript,linux,google-chrome,google-chrome-extension,Javascript,Linux,Google Chrome,Google Chrome Extension,我正在尝试为Chrome本机消息创建Hello World应用程序。我创建了一个Chrome扩展,一个二进制可执行文件和html页面。我使用的是Linux和Chromium 我想我已经把所有的东西都注册好了,但是它仍然不起作用 在我的网页上,我向我的分机发送了一条消息,下面是我分机的部分代码: chrome.runtime.onMessage.addListener(function (msg, snd, sndResp) { var prt = chrome.runtime.con

我正在尝试为Chrome本机消息创建Hello World应用程序。我创建了一个Chrome扩展,一个二进制可执行文件和html页面。我使用的是Linux和Chromium

我想我已经把所有的东西都注册好了,但是它仍然不起作用

在我的网页上,我向我的分机发送了一条消息,下面是我分机的部分代码:

chrome.runtime.onMessage.addListener(function (msg, snd, sndResp) {    
  var prt = chrome.runtime.connectNative('com.example.my_app');
  prt.postMessage(msg); // Error in event handler for runtime.onMessage: Error: Attempting to use a disconnected port 
请注意,“msg”不是空的,它的内容与我在html页面上输入的内容相同。所以这没什么问题

但是,在扩展中,错误是:

Error in event handler for runtime.onMessage: Error: Attempting to use a disconnected port 

连接关闭时可能会导致此错误。它可能会失败,因为选项卡不再处于活动状态,无法接收消息

试着分别使用或。它允许您区分不同类型的连接

当建立连接时,每一端都有一个对象,用于通过该连接发送和接收消息

以下是如何从内容脚本打开频道,以及如何发送和侦听消息:

var port = chrome.runtime.connect({name: "knockknock"});
port.postMessage({joke: "Knock knock"});
port.onMessage.addListener(function(msg) {
if (msg.question == "Who's there?")
port.postMessage({answer: "Madame"});
else if (msg.question == "Madame who?")
port.postMessage({answer: "Madame... Bovary"});
});

您是否在
~/.config/chromium/NativeMessagingHosts/
中包含主机清单文件?@guest271314,是的。它可以有任何文件名或com.example.my_app.json吗?您应该可以使用任何文件名。另请参阅“可用于在不创建端口的情况下向本机应用程序发送消息”,您是否阅读了?@guest271314,是的。为什么是“连接”而不是“连接本机”?另外,这个
chrome.runtime.connectNative('com.example.my_app')
和这个
chrome.runtime.connectNative('fdsfds')的行为方式相同--没有错误,port.name为空。为什么?我认为Chromium根本找不到本机应用程序。