Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome extension Chrome扩展-具有多个端口的消息传递_Google Chrome Extension_Messaging - Fatal编程技术网

Google chrome extension Chrome扩展-具有多个端口的消息传递

Google chrome extension Chrome扩展-具有多个端口的消息传递,google-chrome-extension,messaging,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") { por

在我的扩展中,不同的内容脚本连接到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中激活:

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向端口发送消息。

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

我认为你试图从双方“连接”,这是没有意义的


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

@Vincent端口变量不是已经保存在函数上下文中了吗?奇怪的是它工作了。它保存在一端,但另一端没有。因为我在每页使用多个端口,所以我使用名称来标识它们。