Chrome扩展多个端口导致Disconnected Port错误
Chrome extension multiple ports gives Disconnected Port error
我正在开发一个Chrome扩展,其中我使用了两个不同的内容脚本。一个加载在主页中,另一个加载到iframe中加载的外部页面(由我控制)中。这两个脚本需要双向通信,这就是我尝试实现Messaging API的原因。
据我所知,最好让每个页面都与background.js进行通信。这就是我正在尝试实现的。目前,我只是想看看这些信息是否到达。但我得到的错误是:
Error: Attempting to use a disconnected port object
它指的是background.js中的"page_post.postMessage(msg)"。问题可能是我使用了多个端口吗?
menu.js
var port = chrome.runtime.connect({name: "menuport"});
port.postMessage({source: "menu", status: "ready", id: menu_id});
port.onMessage.addListener(function(msg) {
console.log('MenuJS')
console.log(msg)
});
page.js
var page_port = chrome.runtime.connect({name: "pageport"});
page_port.postMessage({source: "page", status: "ready"});
page_port.onMessage.addListener(function(msg) {
console.log('PageJS')
console.log(msg)
});
background.js
var menu_port = chrome.runtime.connect({name: "menuport"});
var page_port = chrome.runtime.connect({name: "pageport"});
chrome.runtime.onConnect.addListener(function(menu_port) {
menu_port.onMessage.addListener(function(msg) {
console.log('BGJS')
console.log(msg)
page_port.postMessage(msg);
});
});
chrome.runtime.onConnect.addListener(function(page_port) {
page_port.onMessage.addListener(function(msg) {
console.log(msg)
});
});
您的background page
应该注册一次runtime.onConnect
侦听器,并通过port.name
区分不同的端口。
background.js
chrome.runtime.onConnect.addListener(function(port) {
if(port.name === "menuport") {
// menu port logic
} else if (port.name === "pageport") {
// page port logic
}
});
用不同的公式再次问了这个问题,很快就得到了答案。诀窍是在连接后存储端口。请参阅Chrome扩展-多端口消息传递
相关文章:
- Chrome扩展多个端口导致Disconnected Port错误
- 为什么在定义回调/侦听器函数(异步消息传递,port.on)后没有立即设置全局变量
- Firefox 附加组件 SDK Worker.port 事件不起作用
- 使用 self.port.on 时,火狐内容脚本中的变量未更新
- Firefox addon - port.emit inside port.on
- Chrome Console Error: chromeHidden.Port.dispatchOnDisconnect
- 无法让 port.emit 和 port.on 在 Firefox 附加组件中工作
- 在 Firefox Add-on SDK 中使用 port.on 传递数据
- runtime.sendMessage 和 port.postMessage 之间的区别
- 尝试将Python/flask应用程序部署到Heroku时,未能绑定到$PORT
- Firefox插件:为什么面板中的self.port'的contentscript未定义
- process.env.PORT打印奇怪的字符串
- iceConnectionState is disconnected - VP9 Coded is null - Pee
- 如何在contentScript中使用port.emit()
- port 8888 net::ERR_CONNECTION_REFUSED
- Firefox扩展:self.port.on没有将结果传递给外部函数
- 套接字.io:如何放弃url:port模式
- Rumor Socket Disconnected:检测到连通性丢失,因为距离套接字收到上次PONG消息太久
- Heroku process.env.port is undefined
- Javascript port var test = { a: Infinity }