Is there any way I could catch any uncaught exception in javascript? I mean, all my \"dangerous\" code are in try-catch blocks. But what about exceptions that I don\'t handl
You could write a function that would wrap your real handlers in a try/catch
function tc(func, msg) {
msg = msg || "Handler exception";
return function(e) {
try {
return func(e);
}
catch (exc) {
$.post( /* send exception to server? */ );
throw exc; // let nature take its course
}
};
}
(Might want to get fancier with argument handling etc.) Then when you bind handlers you'd do:
$('#whatever').click(tc(function(e) {
// your handler function
}, "This is the message sent to the server when this handler fails"));
Also, if you want to make sure "this
" in the handler behaves as before, you can do func.apply($(this), e)
instead of just func(e)
.
You can use the window.onerror event handler, it's not supported in Opera though and it may not fire in certain situations (thanks @Josh).
It's not really wise to do this, however, it will make bug finding a nightmare for a start. It's generally best to make sure your code is error free in the first place :-) You certainly shouldn't need to use try... catch
statements very often in JavaScript and you definitely shouldn't be using empty catch
blocks.
I can use try-catch blocks here, but they will caught exceptions that occured during the event binding procedure, not during the event handling.
You can also add try/catch blocks to inner scopes:
// Outer
try {
$(document).ready(function(){})
}
catch (e) {
/* Error handling */
}
// Inner
$(document).ready(function(){
try { /* ... */ } catch (e) { /* Error handling */ }
});
How about
function func_madness() {
throw("This function is throwing exceptions, because \n" +
"it can not throw polar bears and whales.\n");
} // func_madness
window.onload = function () {
try {
func_madness();
} catch (err) {
document.write("Caught it!\n<br/>\n" + err);
} // catch
} // window.onload