簡體   English   中英

chrome擴展中具有長期連接的“嘗試使用斷開連接的端口對象”

[英]“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屏幕截圖 我經常收到該錯誤消息,但是一旦禁用該擴展名,該消息就會消失:)

每當關閉彈出窗口時,它顯示的頁面也會被關閉/破壞,這與始終運行的后台頁面不同。

因此,長久的連接中斷了,因為其中一方不再存在。

您應該從使用長期連接切換為簡單消息。 打開時,彈出窗口請求當前狀態,而后台頁面廣播狀態更新。 如果彈出窗口沒有監聽更新(因為它沒有打開),則不會造成任何危害。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM