【发布时间】:2011-07-16 17:39:53
【问题描述】:
我想知道是否有人在全局处理 JavaScript 错误并将它们从客户端浏览器发送到服务器方面有经验。
我觉得我的意思很清楚了,我想知道客户端发生的每一个异常、错误、编译错误等,并发送到服务器上报告。
我主要使用 MooTools 和 head.js(用于 JS 端)和 Django 用于服务器端。
【问题讨论】:
标签: javascript error-handling client-side
我想知道是否有人在全局处理 JavaScript 错误并将它们从客户端浏览器发送到服务器方面有经验。
我觉得我的意思很清楚了,我想知道客户端发生的每一个异常、错误、编译错误等,并发送到服务器上报告。
我主要使用 MooTools 和 head.js(用于 JS 端)和 Django 用于服务器端。
【问题讨论】:
标签: javascript error-handling client-side
不要尝试使用第三方服务,而是尝试自己的服务。
错误处理程序可以捕获以下场景,
捕获 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
}
})
})
【讨论】:
如果您的网站使用 Google Analytics,您可以按照我的做法:
window.onerror = function(message, source, lineno, colno, error) {
if (error) message = error.stack;
ga('send', 'event', 'window.onerror', message, navigator.userAgent);
}
上面代码的几个cmet:
代码到位后,您可以通过以下方式查看用户的 Javascript 错误:
Behavior 部分,然后点击 Top Events 报告。window.onerror。Secondary dimension 按钮并在出现的文本框中输入Event Label,为您的用户的操作系统/浏览器版本在报告中添加一列。【讨论】:
我会去看看window.onerror
例子:
window.onerror = function(message, url, lineNumber) {
//save error and send to server for example.
return true;
};
请记住,返回 true 将阻止触发默认处理程序,返回 false 将让默认处理程序运行。
【讨论】:
setTimeout、setInterval 或其他宏/微任务调用):var errNum = 0; window.addEventListener('error', () => { console.log(Error #${++errNum}); throw new Error(); }); setTimeout(() => {throw new Error()}, 100);