"试图使用断开连接的端口对象“;铬合金延长件中的长寿命连接
"Attempting to use a disconnected port object" with Long-lived connections in chrome extension
我得到这个错误Uncaught Error: Attempting to use a disconnected port object
当我第一次打开弹出页面时,之间有一个长期的连接
内容脚本<->背景页<->弹出页面。
当我点击浏览器动作图标时,弹出页面将通过后台页面从服务器获取一些信息进行初始化。
第一次点击时一切都很好,但如果我关闭弹出窗口并再次点击,它就无法从后台页面获取信息。
这是我的代码
弹出页面
window.onload = function() {
var port = chrome.runtime.connect({name: "stadium"});
chrome.tabs.query({ currentWindow: true, active: true }, function callback(tabs){
console.log("send TabID to background page");
port.postMessage({"method":"sendTabId","content": tabs[0].id});
});
port.postMessage({"method" : "initialPopup"});//initilaize request
port.onMessage.addListener(function(msg) {
console.log("somthing");
if (msg.method == "updatePage"){
initialize....
}
else if(...){...}
});
和背景页
var socket = io.connect('http://localhost:3700/');
chrome.tabs.onRemoved.addListener(function(tabId,removeInfo){
if(tabId==stadiumTabId){
//change to the original style popup page
chrome.browserAction.setPopup({"popup":"../pages/popup_out_guest.html"});
}
});
chrome.runtime.onConnect.addListener(function(port) {
console.assert(port.name == "stadium");
port.onMessage.addListener(function(msg) {
if (msg.method == "initialPopup"){ //get the initilaize request
socket.emit('updateMatchInfo',"haha");
socket.on('getUpdate',function(matchInfo){
console.log("background page get data from server");
port.postMessage({"method":"updatePage","content": matchInfo});
});
}
else if (msg.method == "something"){
//insert content scripts
chrome.tabs.executeScript({file: 'js/content_scripts.js', allFrames: true});
//change to another popup page style
chrome.browserAction.setPopup({"popup":"../pages/popup_in_guest.html"});
}
});//port.onMessage.addListener
});//onConnect.addListener
错误发生在后台页面的这一行
port.postMessage({"method":"updatePage","content": matchInfo});
我已经检查了服务器是否正确地将数据发送到后台页面,但就是无法找出错误。
谢谢你的帮助!!
你是不是顺便使用了Awesome屏幕截图?我经常收到错误消息,但一旦我禁用了该扩展,消息就消失了:)
每当关闭弹出窗口时,它显示的页面也会被关闭/销毁,这与总是运行的后台页面不同。
因此,当其中一方不复存在时,一个长期存在的连接就会断开。
您应该从使用长期连接切换到使用简单消息。当它打开时,弹出窗口请求当前状态,后台页面广播状态更新。如果弹出窗口没有监听更新(因为它没有打开),则不会造成任何伤害。
相关文章:
- 如何在JavaScript中延长当前日期
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 如何使用密码检测网络中的状态连接
- 如何处理node.js节点mongodb中的连接和查询队列
- Rails-JQueryUIAutcomplete和AJAX不工作,可以't连接到数据库
- JQuery动画延长容器不起作用
- Twilio-显示所有连接参与者的远程参与者视频
- 操作放置在画布上的元素之间的连接
- TypeError:_this.store.getState在使用来自Redux的连接时不是函数
- jQuery UI可排序-多连接列表拖动
- 如何使用offer/answer交换来自两个对等连接的流
- 在Qualtrics中,介绍如何动态连接两个滑块
- 使用优化器在慢速连接上加载main.js时需要js超时
- 如果连接类型为none,则Javascript Function Only警报
- GTK百老汇支持同时连接
- 在node.js中写入ECONNRESET错误和套接字连接检查
- 如何将所有JS文件连接到一个文件夹中
- 在cordova android应用程序中连接数据库
- 镀铬延长件上的带电连接
- "试图使用断开连接的端口对象“;铬合金延长件中的长寿命连接