如何实现“返回真;”?错误:“在收到响应之前消息端口已关闭。”

Ald*_*ord 3 javascript google-chrome runtime-error google-chrome-extension

如何实现我的事件处理程序返回true?(尝试了一切,但错误返回)

我收到以下错误:

“未经检查的 runtime.lastError:在收到响应之前消息端口已关闭。”

解决办法是:

"注意:sendResponse回调只有在同步使用时才有效,或者如果事件处理程序返回true表示它将异步响应。如果没有处理程序返回true或者sendResponse回调被垃圾收集,sendMessage函数的回调将被自动调用.”

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;
    }
});
Run Code Online (Sandbox Code Playgroud)

Ald*_*ord 10

现在好像修好了。我return true; 在倒数第二行添加,现在日志中没有更多错误条目。

这个解决方案好吗?如果有什么问题,将很高兴提供反馈。否则,我会在几天内将此线程标记为已解决。

// 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;
});
Run Code Online (Sandbox Code Playgroud)