Теперь кажется (почти) возможным использовать один и тот же код для расширения в Chrome и Firefox. Однако, когда речь идет об отправке сообщений между различными частями расширения (всплывающее окно, контент, фон), все еще существуют несовместимости.
Firefox теперь, кажется, немного впереди, используя новое предложенное пространство имен browser.
, в то время как Chrome использует chrome.
. Firefox также использует обещания, в то время как 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);
})
});
}
Я полагаю, кто-то еще уже делал это? Есть ли для этого где-нибудь библиотека совместимости? Или, по крайней мере, пост в блоге, который описывает существующие несовместимости в этой области?