我已将PHP配置为在发生错误时向我发送邮件。我想用Javascript做同样的事。
另外,鉴于这将是客户端,它可能会被滥用。
当JS在Web应用程序中断时,有什么好方法可以通过邮件通知?
更新
为了给出一些观点,我通常会加载几个js文件,包括库(大多数时候是jQuery)。
答案 0 :(得分:9)
您可以收听全球onError
事件。
请注意,当 引发错误时,您需要确保它不会无限循环。
<script type="text/javascript">
var handlingError = false;
window.onerror = function() {
if(handlingError) return;
handlingError = true;
// process error
handlingError = false;
};
</script>
答案 1 :(得分:3)
下面的代码依赖于全局onError事件,它不需要任何外部库,可以在任何浏览器中使用。
您应该在任何其他脚本之前加载它,并确保您有一个服务器端jserrorlogger.php脚本来获取错误。
代码包含一个非常简单的自我限制机制:它将在第10个错误后停止向服务器发送错误。如果你的代码卡在一个产生数以万计错误的循环中,这就派上用场了。
为避免滥用,您应在PHP代码中包含类似的自我限制机制,例如:
请注意,为了更好地跟踪javascript错误,您应该将相关代码包装在try / catch块中,并可能使用此处的printstacktrace函数:
https://github.com/eriwen/javascript-stacktrace
<script type="text/javascript">
var globalOnError = (function() {
var logErrorCount = 0;
return function(err, url, line) {
logErrorCount++;
if (logErrorCount < 10) {
var msg = "";
if (typeof(err) === "object") {
if (err.message) {
// Extract data from webkit ErrorEvent object
url = err.filename;
line = err.lineno;
err = err.message;
} else {
// Handle strange cases where err is an object but not an ErrorEvent
buf = "";
for (var name in err) {
if (err.hasOwnProperty(name)) {
buf += name + "=" + err[name] + "&";
}
}
err = "(url encoded object): " + buf;
}
}
msg = "Unhandled exception ["+err+"] at line ["+line+"] url ["+url+"]";
var sc = document.createElement('script'); sc.type = 'text/javascript';
sc.src = 'jserrorlogger.php?msg='+encodeURIComponent(msg.substring(0, Math.min(800, msg.length)));
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(sc, s);
}
return false;
}
})();
window.onerror = globalOnError;
</script>
答案 2 :(得分:1)
您可以将整个程序包装在try / catch中,并通过AJAX将捕获的异常发送到可以生成电子邮件的服务器。没错(我不会这样做)答案是“不是真的。”
答案 3 :(得分:0)
答案 4 :(得分:0)
来自记录JavaScript错误的人的记录。