【问题标题】:Rollbar does not detect errors within chrome.tabs callbacksRollbar 未检测到 chrome.tabs 回调中的错误
【发布时间】:2019-04-05 10:03:36
【问题描述】:

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

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

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

无论它发生在后台脚本中,还是通过chrome-extension:// url 访问的扩展页面中,行为都是相同的。

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

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

【问题讨论】:

  • 可能与 chrome 扩展 API 中的所有回调都是异步调用的事实有关。我不知道 Rollbar,但也许它需要一些明确的调整来处理它。
  • @wOxxOm 它与扩展中的其他回调一起使用,例如 addEventListener 和 setTimeout。据我了解,这些也是异步的。
  • [嗯,另一个猜测] 也许 Rollbar 钩住了标准的 DOM 东西,而 chrome API 不是标准的,所以它没有被钩住,你需要以某种方式手动完成。

标签: google-chrome-extension rollbar


【解决方案1】:

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 本身似乎并不知道错误的来源。

两个回调中的窗口对象确实将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。至少它确实有正确的错误信息。

【讨论】:

    猜你喜欢
    • 2020-02-26
    • 2020-10-25
    • 2014-02-08
    • 2014-07-01
    • 2021-08-25
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    相关资源
    最近更新 更多