在IE中使用window.onerror捕获自定义javascript异常

在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

我有一个用于特定情况的自定义异常类。它可以从任何地方抛出,因此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函数接收的是抛出的且未捕获的
异常,而不是我的自定义异常。

我不知道如何在
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