Использование chrome.runtime.sendMessage не дает ответа в веб-расширении Firefox

Я пытаюсь написать кросс-браузерное расширение, использующее фоновый скрипт и всплывающее окно, которое взаимодействует между собой:

В фоновом скрипте:

class Listener{
    listen(cb){
        chrome.runtime.onMessage.addListener((transmission, sender, messageResponseFn) => {
            cb(transmission, messageResponseFn);
            return true;
        });
    }
}

export default new Listener();

Во всплывающем окне:

class Emitter{
    send(message, payload){
        return new Promise((resolve, reject) => {
            chrome.runtime.sendMessage({ message, payload }, (responseMessage) => {
                resolve(responseMessage);
            });
        });
    }
}

export default new Emitter();

Это работает, как и ожидалось, в Chrome, но в Firefox отправленный ответ (функция вызывается правильно и не выбрасывает) никогда не прибудет в мой Emitter. Я неправильно использую этот API? Есть ли какие-либо различия между Firefox и Chrome, о которых я не знаю? Из того, что я прочитал в документах, runtime.sendMessage API должен быть полностью поддерживается.

FWIW, вот пример репозитория, демонстрирующий проблему: https://github.com/m90/firefox-webextension-issue


person m90    schedule 17.11.2015    source источник
comment
Вероятно, связано с исправлением (FF44). Также попробуйте задать вопрос на форуме разработчиков надстроек Mozilla.   -  person wOxxOm    schedule 17.11.2015
comment
Хорошо, спасибо, попробую спросить на форуме.   -  person m90    schedule 17.11.2015


Ответы (1)


Это подтвержденная ошибка в WebExtension API, так что с ней особо ничего не поделаешь. .

person m90    schedule 04.12.2015
comment
Вероятно, стоит обновить, что ошибка теперь РЕШЕНА, ИСПРАВЛЕНА. - person Xan; 04.11.2016
comment
это действительно решено? @Xan Я до сих пор не могу получить сообщение в Firefox, хотя это отлично работает в Chrome и Edge. - person Enmanuel Duran; 22.07.2021