提问人:Olivier Girardot 提问时间:3/17/2011 最后编辑:Sebastian SimonOlivier Girardot 更新时间:8/6/2021 访问量:98246
捕获所有 JavaScript 错误并将它们发送到服务器 [已关闭]
Catch all JavaScript errors and send them to server [closed]
问:
我想知道是否有人有全局处理 JavaScript 错误并将其从客户端浏览器发送到服务器的经验。
我想我的观点很清楚,我想知道客户端发生的每一个异常、错误、编译错误等,并将它们发送到服务器进行报告。
我主要使用 MooTools 和(用于 JS 端)和 Django 用于服务器端。head.js
答:
321赞
Mike Lewis
3/17/2011
#1
我会检查window.onerror
例:
window.onerror = function(message, url, lineNumber) {
//save error and send to server for example.
return true;
};
请记住,返回 true 将阻止触发默认处理程序,返回 false 将允许默认处理程序运行。
评论
9赞
Mike Lewis
3/17/2011
您最好在运行其他任何内容之前分配 window.onerror。因此,无论您想将其放在哪里,只需确保它在任何其他 js 代码/文件之前运行即可。
19赞
Adam Naylor
10/8/2012
请注意,Mozilla建议:“请注意,某些/许多错误事件不会触发window.onerror,您必须专门侦听它们。
8赞
roland
8/21/2015
Mozilla 公开 GlobalEventHandlers.onerror: developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/...
3赞
Martin Brown
6/5/2017
如果处理 window.onerror 的代码本身引发错误,会发生什么情况。有无限循环的可能性吗?
2赞
Mike Hill
7/8/2020
@MartinBrown Chrome 和 Firefox 中的简短测试似乎表明,错误处理过程中的错误不会递归处理,从而防止无限循环,假设所有错误都是在同一事件循环任务(即 no 、 、 或其他宏/微任务调用)期间抛出的: 错误 #${++errNum}Promise
setTimeout
setInterval
var errNum = 0; window.addEventListener('error', () => { console.log(
); throw new Error(); }); setTimeout(() => {throw new Error()}, 100);
24赞
Martin Omander
6/14/2018
#2
如果您的网站使用的是 Google Analytics,您可以执行我的工作:
window.onerror = function(message, source, lineno, colno, error) {
if (error) message = error.stack;
ga('send', 'event', 'window.onerror', message, navigator.userAgent);
}
对上述代码的几点评论:
- 对于现代浏览器,将记录完整的堆栈跟踪。
- 对于不捕获堆栈跟踪的旧版浏览器,将改为记录错误消息。(根据我的经验,主要是早期的 iOS 版本)。
- 用户的浏览器版本也会被记录下来,因此您可以查看哪些操作系统/浏览器版本引发了哪些错误。这简化了 bug 优先级和测试。
- 如果您将Google Analytics与“analytics.js”一起使用,则此代码有效,如下所示。如果你使用“gtag.js”,像这样,你需要调整函数的最后一行。有关详细信息,请参阅此处。
代码到位后,您可以查看用户的 Javascript 错误:
- 在 Google Analytics(分析)中,先点击相应部分,然后点击报告。
Behavior
Top Events
- 您将获得一个事件类别列表。单击列表中。
window.onerror
- 您将看到 Javascript 堆栈跟踪和错误消息的列表。通过单击按钮并在显示的文本框中输入,将用户的操作系统/浏览器版本的列添加到报表中。
Secondary dimension
Event Label
- 该报告将如下面的屏幕截图所示。
- 为了将操作系统/浏览器字符串转换为更易于阅读的描述,我将它们复制粘贴到 https://developers.whatismybrowser.com/useragents/parse/
4赞
sam ruben
4/26/2019
#3
不要尝试使用第三方服务,而是尝试自己的服务。
错误处理程序可以捕获以下情况:
- 无法捕获未捕获的 TypeError
- 无法捕获未捕获的引用错误,例如:var.click()
- 可以捕获 TypeError
- 可以捕获语法错误
- 可以捕获 ReferenceError
要捕获 Javascript 错误,请执行以下操作:
window.addEventListener('error', function (e) {
//It Will handle JS errors
})
要捕获 AngularJS 错误:
app.config(function ($provide) {
$provide.decorator('$exceptionHandler', function ($delegate) {
return function (exception, cause) {
//It will handle AngualarJS errors
}
})
})
下一个:AngularJS:了解设计模式
评论