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

0g0grzrc  于 2023-10-14  发布在  Go
关注(0)|答案(3)|浏览(143)

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

理想情况下,我会在内容脚本的顶部设置一个全局window.onerror处理程序。但它在Chrome 40中无法正常工作:错误被捕获,但提供的信息是无用的:一个“脚本错误”的消息,没有url,lineNumber,列或堆栈错误对象。
我创建了一个测试扩展来显示内容脚本的这种破坏行为。详情见下文。有趣的发现:

正在为Chrome扩展内容脚本复制损坏的window.onerror。

在新文件夹中,创建manifest.jsoncontent-script.jsbackground-script.js。然后通过Window > Extensions > Load unpacked Extension加载到Chrome中。

  • 要查看内容脚本错误的busted 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"]
    }]
}

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: ' + lineNumber);
    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?');
ukxgm1gy

ukxgm1gy1#

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

  • 我创建了一个Chrome bug报告:window.onerror should contain useful info for thrown error in extension content script。请随意发表有用的评论。
  • 如果你需要全局捕获内容脚本错误,你最好的办法是假设window.onerror在内容脚本中暂时被破坏。相反,将所有JavaScript代码 Package 在try-catch块中,这使您可以访问有用的错误信息。这比听起来要复杂,因为您必须同时处理同步代码(简单)和错误回调代码(复杂)。先看看这个article,祝你好运!
70gysomp

70gysomp3#

看看TraceKit,这是我们公司用来做所有前端错误记录的东西。如果你将它与你最喜欢的日志服务的JavaScript客户端库合并结合起来,你就万事俱备了。

相关问题