Chrome扩展程序:如何全局捕获/处理内容脚本错误?

huczilla

在Chrome扩展程序中,是否可以全局捕获/处理内容脚本中发生的Javascript错误?(例如,用于提交到bugsnag之类的JavaScript错误跟踪服务)

理想情况下,我将window.onerror在内容脚本的顶部设置一个全局处理程序。但是它在Chrome 40中无法正常工作:捕获了错误,但提供的信息无用:出现“脚本错误”消息,没有url,lineNumber,column或堆栈错误对象。

我创建了一个测试扩展,以显示内容脚本的这种无效行为。详细信息如下。有趣的发现:

  • window.onerror 在后台脚本中可以正常工作,具有完整的错误信息
  • window.onerror在托管网页上还可以看到扩展内容脚本引发的错误(但该错误也不包含任何有用的信息)

为Chrome扩展程序内容脚本重现已破坏的window.onerror。

在一个新的文件夹,创建manifest.jsoncontent-script.jsbackground-script.js然后通过“窗口”>“扩展程序”>“加载解压缩的扩展程序”加载到Chrome中。

  • 要查看内容脚本错误的window.onerror信息,请重新加载网页并查看devtools控制台

manifest.json

{
    "name": "Chrome extension content-script errors test",
    "manifest_version": 2,
    "version": "0.0.1",
    "background": {
      "scripts": [ "background-script.js" ]
    },
    "content_scripts": [{
        "matches": ["<all_urls>"],
        "js": ["content-script.js"]
    }]
}

内容脚本

window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
    console.log('Caught content script error');
    console.log('errorMsg: ' + errorMsg);
    console.log('url: ' + url);
    console.log('lineNumber: ' + column);
    console.log('column: ' + column);
    console.log('errorObj follows:');
    console.log(errorObj);
    return true;
};

console.log('I am a content script, about to throw an error');
throw new Error('Is this error caught?');

background-script.js

window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
    console.log('Caught background script error');
    console.log('errorMsg: ' + errorMsg);
    console.log('url: ' + url);
    console.log('lineNumber: ' + column);
    console.log('column: ' + column);
    console.log('errorObj follows:');
    console.log(errorObj);
    return true;
};

//To see nice window.onerror behaviour for background script..
//Uncomment 2 lines below, reload extension, and look at extension console
//console.log('I am a background script, about to throw an error');
//throw new Error('Is this error caught?');
huczilla

提出此问题5个月后,我现在非常确信目前还没有一种简单的方法可以全局捕获/处理内容脚本中发生的Javascript错误。因此,

  • 我创建了一个Chrome错误报告:window.onerror应该包含有关扩展内容脚本中抛出错误的有用信息随时提出有用的意见。
  • 如果您需要全局捕获内容脚本错误,那么最好的选择是假设window.onerror现在在内容脚本中被破坏了。而是将所有Javascript代码包装在try-catch块中,这使您可以访问有用的错误信息。这比听起来复杂,因为您必须同时处理同步代码(简单)和异步回调代码(trickier)。看看这篇文章对于初学者来说,祝你好运!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Chrome扩展程序:后台脚本捕获网络和HTTP错误

来自分类Dev

Chrome扩展程序:后台脚本捕获网络和HTTP错误

来自分类Dev

如何在Chrome扩展程序内容脚本中获取错误堆栈跟踪?

来自分类Dev

如何在Chrome扩展程序内容脚本中获取错误堆栈跟踪?

来自分类Dev

如何自动测试Chrome扩展程序中的内容脚本?

来自分类Dev

如何选择何时启动Chrome扩展程序的内容脚本?

来自分类Dev

如何取消Chrome扩展程序内容脚本中的事件绑定?

来自分类Dev

在Chrome扩展程序中停止内容脚本

来自分类Dev

Chrome扩展程序:内容脚本注入时如何解决“不允许加载本地资源”错误

来自分类Dev

Chrome扩展程序错误,尝试将数组从内容脚本发送到弹出脚本

来自分类Dev

Chrome扩展程序内容脚本访问扩展程序框架

来自分类Dev

Chrome扩展程序注入脚本获取错误

来自分类Dev

Chrome扩展程序注入脚本获取错误

来自分类Dev

在Chrome扩展程序中将远程脚本作为内容脚本

来自分类Dev

在自举的Firefox扩展中设置全局错误处理程序

来自分类Dev

在 WebBrowser 的错误处理程序中捕获“脚本错误”

来自分类Dev

如何在Chrome扩展程序的内容脚本之间重复使用代码?

来自分类Dev

如何确定内容脚本的弹出窗口中是否包含Chrome扩展程序?

来自分类Dev

在chrome扩展程序中,如何使用内容脚本注入Vue页面

来自分类Dev

Chrome扩展程序:如何获取网页以访问由内容脚本定义的功能?

来自分类Dev

如何通过内容脚本在Chrome扩展程序中设置标志文本?

来自分类Dev

如何使用Chrome扩展程序内容脚本将具有相同域的多个网站进行匹配

来自分类Dev

如何使用Chrome扩展程序(内容脚本)覆盖拖动事件侦听器?

来自分类Dev

Chrome扩展程序内容脚本:click()和异步结果

来自分类Dev

Chrome扩展程序内容脚本未触发代码

来自分类Dev

Chrome扩展程序:检查内容脚本是否已注入

来自分类Dev

从Chrome扩展程序中的内容脚本传递消息

来自分类Dev

Chrome扩展程序内容脚本自定义ui

来自分类Dev

从Chrome扩展程序内容脚本创建Web Worker

Related 相关文章

  1. 1

    Chrome扩展程序:后台脚本捕获网络和HTTP错误

  2. 2

    Chrome扩展程序:后台脚本捕获网络和HTTP错误

  3. 3

    如何在Chrome扩展程序内容脚本中获取错误堆栈跟踪?

  4. 4

    如何在Chrome扩展程序内容脚本中获取错误堆栈跟踪?

  5. 5

    如何自动测试Chrome扩展程序中的内容脚本?

  6. 6

    如何选择何时启动Chrome扩展程序的内容脚本?

  7. 7

    如何取消Chrome扩展程序内容脚本中的事件绑定?

  8. 8

    在Chrome扩展程序中停止内容脚本

  9. 9

    Chrome扩展程序:内容脚本注入时如何解决“不允许加载本地资源”错误

  10. 10

    Chrome扩展程序错误,尝试将数组从内容脚本发送到弹出脚本

  11. 11

    Chrome扩展程序内容脚本访问扩展程序框架

  12. 12

    Chrome扩展程序注入脚本获取错误

  13. 13

    Chrome扩展程序注入脚本获取错误

  14. 14

    在Chrome扩展程序中将远程脚本作为内容脚本

  15. 15

    在自举的Firefox扩展中设置全局错误处理程序

  16. 16

    在 WebBrowser 的错误处理程序中捕获“脚本错误”

  17. 17

    如何在Chrome扩展程序的内容脚本之间重复使用代码?

  18. 18

    如何确定内容脚本的弹出窗口中是否包含Chrome扩展程序?

  19. 19

    在chrome扩展程序中,如何使用内容脚本注入Vue页面

  20. 20

    Chrome扩展程序:如何获取网页以访问由内容脚本定义的功能?

  21. 21

    如何通过内容脚本在Chrome扩展程序中设置标志文本?

  22. 22

    如何使用Chrome扩展程序内容脚本将具有相同域的多个网站进行匹配

  23. 23

    如何使用Chrome扩展程序(内容脚本)覆盖拖动事件侦听器?

  24. 24

    Chrome扩展程序内容脚本:click()和异步结果

  25. 25

    Chrome扩展程序内容脚本未触发代码

  26. 26

    Chrome扩展程序:检查内容脚本是否已注入

  27. 27

    从Chrome扩展程序中的内容脚本传递消息

  28. 28

    Chrome扩展程序内容脚本自定义ui

  29. 29

    从Chrome扩展程序内容脚本创建Web Worker

热门标签

归档