我收到此错误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 Screenshot?我经常收到该错误消息,但是一旦禁用该扩展名,该消息就会消失:)

关于javascript - chrome扩展中具有长期连接的“尝试使用断开连接的端口对象”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17880790/

10-11 03:53