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

前端之家收集整理的这篇文章主要介绍了javascript – 如何在Chrome扩展程序内容脚本中获取错误堆栈跟踪?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有一个带有内容脚本的 Google Chrome extension,用于处理所有选项卡页面上发生的JS错误.但问题是没有一种常见的获取错误堆栈跟踪的方法不起作用.

例如,Chrome扩展程序的内容脚本中有一段代码

window.addEventListener('error',function(event) {
    console.log(event.error.stack); // event.error will be null
},false);

如果我在网页中调用代码,则event.error将包含具有stack属性的Error对象.

使用以下方法尝试获取堆栈跟踪的问题相同:

console.log((new Error()).stack));

有没有人知道在Chrome扩展程序的内容脚本中获取错误堆栈跟踪的一些工作问题?

错误堆栈跟踪必须以字符串或数组的形式接收,这意味着不仅仅是通过调用console.trace()来控制JS控制台中的某些输出.

如何重现:

>下载https://mega.co.nz/#!ENw00YAC!92gBZEoLCO9jPsWyKht4dbjYyo0Zk-PU5YAj0h88-3Q
>将jzen.zip解压缩到某个/ jsen文件
>在您的Google Chrome中打开chrome://扩展程序,启用开发者模式http://i.imgur.com/5x5D6NP.png
>单击加载解压缩的扩展按钮,然后选择/ jsen文件夹的路径
>打开/jsen/content.js文件添加console.log(‘JSEN’,e.error.stack);在window.addEventListener里面(‘error’,function(e){
>转到http://xpart.ru/_share/js.htm并在JS控制台中查看结果(Ctrl Shift J)
>尝试编辑/jsen/content.js以获取正确的错误跟踪
>要重新初始化Chrome扩展程序源代码,请单击http://i.imgur.com/SjFgkHA.png

解决方法

如您所述,在内容脚本上下文中捕获事件时,事件对象的error属性为null,但在网页上下文中捕获时,它具有所需的信息.因此,解决方案是在网页上下文中捕获事件并使用消息传递将其传递到内容脚本.
// This code will be injected to run in webpage context
function codeToInject() {
    window.addEventListener('error',function(e) {
        var error = {
            stack: e.error.stack
            // Add here any other properties you need,like e.filename,etc...
        };
        document.dispatchEvent(new CustomEvent('ReportError',{detail:error}));
    });
}

document.addEventListener('ReportError',function(e) {
    console.log('CONTENT SCRIPT',e.detail.stack);
});

//Inject code
var script = document.createElement('script');
script.textContent = '(' + codeToInject + '())';
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

使用的技术描述如下:

> https://stackoverflow.com/a/9517879/1507998
> https://stackoverflow.com/a/9636008/1507998

猜你在找的JavaScript相关文章