Rollbar 不检测 chrome.tabs 回调中的错误

Rollbar does not detect errors within chrome.tabs callbacks

我注意到滚动条项目不会报告 chrome.tabs 调用回调中发生的错误。例如,不会报告以下错误:

chrome.tabs.getCurrent(function(currentTab) {
    throw "This is critical";
});

如果 throw 语句在 chrome.tabs 回调之外,它会按预期报告给 rollbar。

无论是发生在后台脚本中,还是发生在通过 chrome-extension:// url.

访问的扩展页面中,行为都是相同的

是否有允许 rollbar 跟踪这些回调中的错误的解决方案?

chrome API 回调中抛出的错误,似乎没有被 onerror 侦听器捕获。这是来自 chromium 项目的相关讨论:https://bugs.chromium.org/p/chromium/issues/detail?id=357568

Chrome 本身在选项卡回调中的行为很奇怪,即使不使用 Rollbar 也是如此。

这里是我使用的测试代码:

chrome.tabs.getSelected(null, function(tab){
  console.log('tabs callback', window);
  throw 'Error in tab';
});

setTimeout(function(){
  console.log('timeout callback', window);
  throw 'Error in timeout';
}, 100);

对于超时回调,扩展的后台控制台和错误视图都显示异常的正确代码位置。

但是,对于选项卡回调,位置在控制台和错误视图中显示为 _generated_background_page.html,没有回溯或行号。 Chrome 本身似乎并不知道错误的来源。

两个回调中的 window 对象确实将 onerror 挂钩正确设置为 Rollbar 的处理程序。但是在选项卡示例中,它永远不会被调用。 Chrome 似乎在到达 onerror 处理程序之前捕获错误,或者这是什至不使用 onerror 处理程序的任何类型的线程。

作为解决方法,我尝试将代码包装在 try/catch 中,并向 Rollbar 报告:

chrome.tabs.getSelected(null, function(tab){
  try {
    console.log('tabs callback', window);
    throw 'Error in tab';
  }
  catch (e) {
    console.log('error', e);
    Rollbar.log(e);
  }
});

这有效,但错误对象仍将其位置报告为 _generated_background_page.html。至少它确实有正确的错误信息。