Я пытаюсь написать кросс-браузерное расширение, использующее фоновый скрипт и всплывающее окно, которое взаимодействует между собой:
В фоновом скрипте:
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