在IE中使用window.onerror捕获自定义javascript异常
我有一个用于特定情况的自定义异常类。它可以从任何地方抛出,因此try/catch并不实用在IE中使用window.onerror捕获自定义javascript异常,javascript,internet-explorer,exception,Javascript,Internet Explorer,Exception,我有一个用于特定情况的自定义异常类。它可以从任何地方抛出,因此try/catch并不实用 throw new CustomException; 我想在window.onerror中捕获这个错误并将其过滤掉,这在我测试过的大多数浏览器中都可以正常工作 var window_onerror = window.onerror || function() {return false;}; window.onerror = function(message, url, line) { if (me
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函数接收的是抛出的且未捕获的
异常,而不是我的自定义异常。我不知道如何在onerror
处理程序中检索抛出的对象。作为一种解决方法,我建议抛出一个带有自定义消息的通用运行时错误,即
throw new Error('foo')
检查
message === 'foo'
在处理函数内部
编辑:工作示例代码:
window.onerror = function(message, url, line) {
alert(message === 'foo');
return true;
};
throw new Error('foo');
我们在exceptioner.com上使用了一个通用异常处理程序,但是每个浏览器的行为不同,并以不同的方式报告相同的异常
此外,浏览器的不同本地化版本以不同的方式运行,例如,我看到一些用户在俄语中出现Javascript错误——这不是世界上最容易解析的事情
此脚本将让您了解不同浏览器如何处理错误:-
window.onerror = function(message, uri, line) {
var fullMessage = location.href + '\n' + uri + '\n' + line;
alert(fullMessage);
return false;
}
谢谢
Phil.声明一个全局变量和一些枚举
var errorCode;
const ErrCustomException = 1, ... ;
在抛出异常之前放一行
errorCode = ErrCustomException;
throw new CustomException;
将条件更改为此
window.onerror = function(message, url, line) {
if (errorCode == ErrCustomException) {
return true;
} else {
return window_onerror(message, url, line);
}
};
我承认它可以在IE中工作(这就是我所要求的),但是Firefox只报告脚本错误。参见脚本/cgd/Module.js在qunit/index.html中测试,Throw位于第126行,异常定义和处理程序从196开始。您不应该在fullMessage
变量中包含message
?