我有一个自定义异常类,我正在使用它来处理特定情况。它可以从任何地方抛出,所以try / catch实际上并不实用。
throw new CustomException;
我想在window.onerror中捕获此错误并将其过滤掉,这在我到目前为止测试的大多数浏览器中都能正常工作。
var window_onerror = window.onerror || function() {return false;};
window.onerror = function(message, url, line) {
if (message.match(CustomException.prototype.name)) {
return true;
} else {
return window_onerror(message, url, line);
}
};
然而,在IE中,window.onerror函数接收Exception thrown and not caught
而不是我的自定义异常。
答案 0 :(得分:2)
我们在Exceptioneer.com上使用了一个通用的异常处理程序,但每个浏览器的行为都不同,并以不同的方式报告相同的异常。
此外,浏览器的不同本地化版本以不同的方式起作用,例如,我从一些用户那里看到了俄语中的Javascript错误 - 这不是世界上最简单的解析错误。
此脚本可让您了解不同的浏览器如何处理错误: -
window.onerror = function(message, uri, line) {
var fullMessage = location.href + '\n' + uri + '\n' + line;
alert(fullMessage);
return false;
}
谢谢,
菲尔。
答案 1 :(得分:1)
我不知道在onerror
处理程序中检索抛出对象的任何方法。作为一种解决方法,我建议使用自定义消息抛出通用运行时错误,即
throw new Error('foo')
并检查
message === 'foo'
处理函数内部。
编辑:工作示例代码:
window.onerror = function(message, url, line) {
alert(message === 'foo');
return true;
};
throw new Error('foo');
答案 2 :(得分:1)
声明一个全局变量和一些枚举。.
socket.on('sent_message', ...)
在抛出异常之前添加一行。
console.log('data is ', data);
将条件更改为此。
var errorCode;
const ErrCustomException = 1, ... ;