Библиотека совместимости для обмена сообщениями в расширениях, Firefox против Chrome

#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 Не могли бы вы, пожалуйста, сформулировать это как ответ, чтобы это стало более заметным для других?