“尝试使用断开连接的端口对象”,同时将邮件从内容发送到 Chrome 扩展程序中的弹出窗口

"Attempting to use a disconnected port object" while sending message from content to popup in Chrome extension

本文关键字:Chrome 程序 扩展 窗口 断开 连接 对象      更新时间:2023-09-26

所以,我需要将消息从弹出窗口传递到内容,反之亦然。目前这是我现在正在做的事情,但这并不能正常工作:

manifest.json:

{
  // Required
    "manifest_version": 2,
    "name": "Extension name",
    "version": "0.1",
    "content_scripts": [
    {
        "matches": ["*://*/*"],
        "js": ["content.js"]
    }
    ],
    "browser_action" : {
        "default_title" : "Extension name",
        "default_popup" : "popup.html"
    },
    "permissions": [
        "tabs",
        "*://*/*",
        "contextMenus"
    ]
}

弹出窗口.js

var port = "";
window.onload = function() 
{
    document.getElementById("captureImage").onclick = captureImage;
}

function captureImage(isBig = true)
{
    chrome.tabs.query({'active': true}, function (tabs) {
        port = chrome.tabs.connect(tabs[0].id, {name: "Besada"});
        port.onMessage.addListener(function(msg) {
            alert(msg.message);
        });
        port.postMessage({message: "getCoords"});
    });
}

和内容.js

chrome.runtime.onConnect.addListener(function(port){
    port.onMessage.addListener(function(msg) {
    });
    port.postMessage({message: "hello!"});  // this message I receive
    document.onmouseup = function(e) {
        port.postMessage({message: "hello!"}); // this message produces an error
    };
});

我需要的是当用户释放鼠标左键时发送消息。发生的情况是:当我单击popup.html中的按钮时,会显示带有文本"Hello"的警报,但是当我在此之后单击页面中的任何位置时,我收到错误:Uncaught Error: Attempting to use a disconnected port object

做错了什么,我该如何解决这个问题?

我猜当我单击页面时弹出窗口关闭时端口正在断开连接,但我对此不太确定。

当您单击其他地方时,弹出窗口将不再作为文档存在。这就像一个已经关闭的选项卡。因此,不再有任何可交流的内容。

修复它的正确方法是与背景页面通信,或使用非易失性chrome.storage。然后,当弹出窗口打开时,您可以使用任一信息源来显示内容。