Как использовать Rollbar.js в расширении Firefox - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь реализовать rollbar.js в расширении Firefox. Однако нет возможности загрузить его в «фрагмент кода ролла» - он загружает файл .js из cdn - это не разрешено в аддонах Firefox.

Итак, я переработал его и загрузил rollbar.js из локального файла . Это решение работает в расширении Chrome, однако в аддоне Firefox я всегда получаю «Rollbar is undefined» ..

Вот упрощенный код, который я использую в poppup.html ...

<script>
  chrome.storage.local.get(['optins'], function(value) {

    var rollbarOptIn = true;

    window._rollbarConfig = {
        accessToken: "xxx",
        captureUncaught: true,
        captureUnhandledRejections: true,
        enabled: rollbarOptIn,
        payload: {
            environment: "{{ ENVIRONMENT }}",
            client: {
              source_map_enabled: true,
              code_version: "{{ VERSION }}",
              guess_uncaught_frames: true
            }
        }
    };
  });
</script>
<script type="text/javascript" src="scripts/rollbar.js" async="false"></script>
<script>
  /* ugly workaround with set timeout... */
  setTimeout(function(){
    ...
    Rollbar.error("test");
    ...
  }, 600);
</script>

Я в конце концов .. пожалуйста, помогите.

1 Ответ

2 голосов
/ 07 ноября 2019

Поскольку chrome.storage является асинхронным, его обратный вызов запускается после rollbar.js, поэтому у вас, вероятно, есть специфичное для браузера условие гонки между асинхронной инициализацией в rollbar и этим обратным вызовом.

Удалите <script> из своего HTML ипопробуйте загрузить его динамически, затем используйте событие onload:

chrome.storage.local.get('optins', ({optins}) => {
  window._rollbarConfig = {
    // ...............
  };
  const el = document.createElement('script');
  el.src = 'scripts/rollbar.js';
  el.onload = useRollbar;
  document.documentElement.appendChild(el);
});

function useRollbar() {
  Rollbar.error("test");
  // ...............
}
...