开发者

javascript error and exception handler

is it possible to register an error or exception handler/function that will be executed when a javascript error or exception occurs? I just feel wrapping all codes in try/catch block seems very tedious and ineffi开发者_如何学JAVAcient.


window.onerror = function (msg, file, line) {
    // handle error here
}

Supported by:

  • Chrome 13+
  • Firefox 6.0+
  • Internet Explorer 5.5+
  • Opera 11.60+
  • Safari 5.1+


Andy E's answer (+1) tells you how to do it.

That said, JavaScript isn't really meant to have caught execeptions in the same sense that, say, Java does. If your code is throwing exceptions, pull up a console and use the debugger to fix them. JS exceptions are slow, and really not meant to be used for flow control. A method won't throw an exception unless there's a serious problem — and it's usually a programming error.


Here's an alternative answer than the window.onerror solution. This isn't something I've used in production, but is something that I just like because of the flexibility (i.e. you could use it to debug things like timing how long a method took or something).

Whilst you could probably pass window into it (don't quote me on that, and don't think it's a good idea) it does work if you have all your methods in an object:

(function(obj) {

    for (var name in obj) {
        if (typeof(obj[name]) == 'function') {
            currentMethod = obj[name];
            obj[name] = function() {
                try {
                    currentMethod();
                }
                catch (e) {
                    alert('Exception Handler: ' + e);
                }
            };
        }
    }

}(myObject));

Here's it working: http://jsfiddle.net/jonathon/kpYnW/

Basically, it goes through each property in your object, finds the ones that are functions and wraps them in a try/catch (or whatever else you want).

Whether or not it's efficient is a different matter - I've just found it a very useful technique for debugging. Unfortunately I can't remember the original place I read it but if anyone knows, please add as a comment.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜