【发布时间】:2019-07-11 04:55:35
【问题描述】:
如何实现我的事件处理程序返回 true? (尝试了所有方法,但错误返回)
我收到以下错误:
"未检查的 runtime.lastError: 消息端口在 a 之前关闭 已收到回复。”
解决办法是:
"注意:sendResponse 回调仅在同步使用时有效, 或者如果事件处理程序返回 true 表示它将响应 异步。将调用 sendMessage 函数的回调 如果没有处理程序返回 true 或者如果 sendResponse 回调被垃圾回收。”
https://developer.chrome.com/extensions/messaging#simple
编辑:另见(chrome):https://github.com/mozilla/webextension-polyfill/issues/130
这是我的代码,非常感谢:
// receive message from pop-up or options
chrome.extension.onMessage.addListener(function (aRequest, aSender,
aSendResponse) {
if (!aSender) {
return;
}
switch (aRequest.cmd) {
// reload lists
case 'reload':
XX.blockedDomains = {};
XX.load();
break;
// send list of recently blocked
case 'blocked':
aSendResponse(Object.keys(XX.blockedDomains));
break;
// deny domain
case 'deny':
XX.blocklist[aRequest.domain] = 1;
delete XX.blockedDomains[aRequest.domain];
XX.save();
break;
}
});
【问题讨论】:
-
贴出的代码没有调用异步函数,所以这里不需要添加
return true。问题肯定出在其他问题上,而不是在发布的代码中,而是在发送消息的代码中。也不清楚为什么你在 WebExtension polyfill 中链接了这个问题,你在这里没有使用它。 -
谢谢,我正在检查所有其他代码。认为上面发布的问题是问题,所以(逻辑上)没有任何帮助。
-
如果 Chrome 73 中出现此错误,请查看 support.google.com/chrome/thread/2047906?msgid=2556826
标签: javascript google-chrome google-chrome-extension runtime-error