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

时间:2009-11-18 19:17:48

标签: 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 (message.match(CustomException.prototype.name)) {
    return true;
  } else {
    return window_onerror(message, url, line);
  }
};

然而,在IE中,window.onerror函数接收Exception thrown and not caught而不是我的自定义异常。

3 个答案:

答案 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, ... ;