最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

internet explorer - Catching a custom javascript exception with window.onerror - in IE - Stack Overflow

programmeradmin5浏览0评论

I have a custom exception class which I'm using for a particular situation. It could be thrown from anywhere so try/catch isn't really practical.

throw new CustomException;

I want to catch this error in window.onerror and filter it out, which works fine in most browsers I've tested so far.

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);
  }
};

However, in IE the window.onerror function receives Exception thrown and not caught instead of my custom exception.

I have a custom exception class which I'm using for a particular situation. It could be thrown from anywhere so try/catch isn't really practical.

throw new CustomException;

I want to catch this error in window.onerror and filter it out, which works fine in most browsers I've tested so far.

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);
  }
};

However, in IE the window.onerror function receives Exception thrown and not caught instead of my custom exception.

Share Improve this question edited Nov 19, 2009 at 17:16 Justin Love asked Nov 18, 2009 at 19:17 Justin LoveJustin Love 4,45728 silver badges37 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 2

We have a universal Exception handler which we use on Exceptioneer. however each browser behaves differently and reports the same exceptions in different ways.

Also, different localised versions of browser act in different ways, for example, I've seen Javascript errors in Russian from some of our users - not the easiest thing in the world to parse.

This script will let you see how different browsers act to errors: -

window.onerror = function(message, uri, line) {
    var fullMessage = location.href + '\n' + uri + '\n' + line;
    alert(fullMessage);
    return false;
}

Thanks,

Phil.

Declare a global variable and some enumerations..

var errorCode;
const ErrCustomException = 1, ... ;

Put a line before your throw exception..

errorCode = ErrCustomException;
throw new CustomException;

Change the condition to this..

window.onerror = function(message, url, line)  {
  if (errorCode == ErrCustomException) {
    return true;
  } else {
    return window_onerror(message, url, line);
  }
};

I don't know of any way to retrieve the thrown object within the onerror handler. As a workaround, I suggest throwing a generic runtime error with a custom message, ie

throw new Error('foo')

and check

message === 'foo'

inside the handler function.

edit: working example code:

window.onerror = function(message, url, line)  {
    alert(message === 'foo');
    return true;
};

throw new Error('foo');
发布评论

评论列表(0)

  1. 暂无评论