首页 > 解决方案 > 如何修复“未检查的 runtime.lastError:消息端口在收到响应之前关闭。” 在自制的 chrome 扩展中?

问题描述

我正在做一些简单的测试来使用 content 和 background.js 之间的一次性通信。代码如下。我总是发现错误“Unchecked runtime.lastError:消息端口在收到响应之前关闭。” 发生在我的 console.log 中。在下面的脚本中,我做了两步。

步骤 1. 浏览器操作后立即从背景向内容发送消息。步骤 2. 将消息从内容发送回后台。如果后台收到消息,它会发出警报。

我认为当消息只发送而没有收到时会触发错误。但是在我的脚本中,两条消息都被接收到了。为什么错误仍然发生?我对此感到非常困惑。如果有人能告诉我原因或如何解决这个问题,我将不胜感激。

我也做了一些测试。该错误似乎与从内容到背景的消息有关。我应该在脚本中手动关闭还是清除端口?

内容.js

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        if( request.message === "clicked_browser_action" ) {
            console.log('content initial');
            chrome.runtime.sendMessage({joke: "Knock knock",key:"initial from content"}, function(response) {
            });
        }
    }
); 

背景.js

//initial 
var tabId;
chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    var activeTab = tabs[0];
    tabId = activeTab.id;
    chrome.tabs.sendMessage(tabId, {"message": "clicked_browser_action"});
  });
});

//receive
chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        if (request.joke == "Knock knock"){
            alert(request.key);
        }
    }
)

标签: google-chrome-extension

解决方案


推荐阅读