Как реализовать «вернуть истину»?Ошибка: «Порт сообщения закрыт до получения ответа». - PullRequest
0 голосов
/ 17 февраля 2019

Как я могу реализовать, чтобы мой обработчик событий возвращал true ?(Пробовал все, но ошибка возвращается)

Я получаю следующую ошибку:

"Не проверено runtime.lastError: Порт сообщения закрыт до получения ответа."

Решение:

"Примечание. Обратный вызов sendResponse действителен только в том случае, если используется синхронно, или если обработчик события возвращает true, чтобы указать, что он будет отвечать асинхронно. Обратный вызов функции sendMessageбудет вызван автоматически, если ни один из обработчиков не вернет true или если обратный вызов sendResponse собран мусором. "

https://developer.chrome.com/extensions/messaging#simple

edit: см. также (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;
    }
});

1 Ответ

0 голосов
/ 21 февраля 2019

Кажется исправлено сейчас.Я добавил 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;
});
...