1

我正在尝试将 rollbar.js 实现到 Firefox 扩展。但是,不可能在“滚动条片段”中加载它——它从 cdn 加载 .js 文件——这在 Firefox 插件中是不允许的。

所以我对其进行了重新设计并从本地文件加载 rollbar.js。此解决方案适用于 Chrome 扩展程序,但在 Firefox 插件中我总是得到“滚动条未定义” ..

这是我在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>

我在最后..请帮助。

4

1 回答 1

2

由于 chrome.storage 是异步的,它的回调在 rollbar.js 之后运行,因此您可能在 rollbar 中的异步初始化和该回调之间存在特定于浏览器的竞争条件。

从您的 HTML 中删除<script>并尝试动态加载它,然后使用它的 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");
  // ...............
}
于 2019-11-07T19:00:10.477 回答