如何解决“未经检查的runtime.lastError:消息端口在收到响应之前已关闭。”在自制的chrome扩展程序中?

时间:2019-07-18 01:10:47

标签: google-chrome-extension

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

步骤1.在浏览器操作完成后,立即从后台向内容发送一条消息。 步骤2.将消息从内容发送回后台。如果后台收到该消息,它将发出警报。

我认为当仅发送邮件而不接收邮件时,将触发错误。但是在我的脚本中,两条消息都被接收到。为什么错误仍然发生?我对此很困惑。如果有人能告诉我原因或解决方法,我将非常感谢。

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

content.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) {
            });
        }
    }
); 

background.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);
        }
    }
)

0 个答案:

没有答案