Chrome扩展程序 - 具有多个端口的消息传递

时间:2016-04-07 13:28:56

标签: google-chrome-extension messaging

在我的扩展程序中,不同的内容脚本连接到background.js以相互通信。我遇到的问题是,当我在一个端口上收到消息时,我无法将此信息转发到另一个端口。我得到的错误是:

Error: Attempting to use a disconnected port object

我在background.js中的代码

chrome.runtime.onConnect.addListener(function(port) {
  if(port.name === "menuport") {
    port.onMessage.addListener(function(msg) {
      console.log('BGJS from menuport')
      console.log(msg)
      var page_port = chrome.runtime.connect({name: "pageport"});
      page_port.postMessage(msg);
    });
  } else if (port.name === "pageport") {
    port.onMessage.addListener(function(msg) {
      console.log('BGJS from pageport')
      console.log(msg)
    });
  }
});

在content.js中激活了pageport:

var page_port = chrome.runtime.connect({name: "pageport"});
page_port.postMessage({source: "page", status: "ready"});
page_port.onMessage.addListener(function(msg) {
    console.log(msg)
});

menuport使用类似的脚本。我可以在控制台中看到两个端口的激活工作。但是,我无法从background.js发送消息到端口。

1 个答案:

答案 0 :(得分:2)

在background.js上,当您收到onConnect回调时,您需要将该端口存储为变量,以便稍后重用。我看到你丢弃了port.name ==" pageport"下的port变量,这导致它被垃圾收集(和断开连接)。将其存储为window.page_port。

我认为你正试图连接"来自双方,这是没有意义的。

一方连接,另一方等待onConnect事件。

相关问题