#google-chrome #firefox #google-chrome-extension #promise #firefox-addon
#google-chrome #firefox #google-chrome-расширение #обещаю #firefox-дополнение
Вопрос:
Теперь кажется (почти) возможным использовать один и тот же код для расширения в Chrome и Firefox. Однако, когда дело доходит до отправки сообщений между различными частями расширения (всплывающее окно, содержимое, фон), все еще существуют несовместимости.
Firefox, похоже, немного продвинулся вперед, используя новое, предложенное browser.
пространство имен, в то время как Chrome использует chrome.
. Firefox также использует promises, в то время как Chrome здесь все еще использует обратные вызовы.
Итак, я пишу функции, подобные этой, чтобы обойти это:
function extTabsSendMessage(tabsId, msg) {
if (typeof chrome === "undefined") {
let smRet = browser.tabs.sendMessage(tabsId, msg);
console("not chrome, smRet", smRet);
return smRet;
}
return new Promise((resolve, reject) => {
chrome.tabs.sendMessage(tabsId, msg, function (response) {
resolve(response);
})
});
}
Я предполагаю, что кто-то еще, должно быть, уже делал это? Есть ли где-нибудь библиотека совместимости для этого? Или, по крайней мере, сообщение в блоге, в котором описывается существующая несовместимость в этой области?
Комментарии:
1. Просто загрузите и используйте WebExtension polyfill от Mozilla.
2. @wOxxOm Отлично, спасибо! github.com/mozilla/webextension-polyfill
3. @wOxxOm Не могли бы вы, пожалуйста, сформулировать это как ответ, чтобы это стало более заметным для других?