google-chrome-extension - 如何修复“未检查的 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);
}
}
)
解决方案
推荐阅读
- reactjs - 如何将私有变量从 ReactJS 转换为 TypeScript?
- java - 使用java的嵌套#if宏处理
- scala - 过滤计数火花数据帧
- ios - Swift 5 + Alamofire 5.*:解码顶部具有相同根对象的数据
- sql-server - 在 SQL Server 2014 中创建一个新的“便携式”服务器,并在其他服务器的同一个 SQL Server Management Studio 实例中查看它
- java - 从 API 解析后,我的 json 数据不匹配
- reactjs - 这是什么问题 setState 不起作用?
- ios - 自定义 UITableViewCell - 似乎无法添加子视图
- python - 如何从 1 开始迭代字典项和索引?
- javascript - 使用JS按多个类别过滤?