我正在做一些简单的测试,以在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);
}
}
)