views:

239

answers:

2

I have some tricky AJAX code on a form, and sometimes it will fail (don't ask why, I can't get around it). When this happens, I need to trap the error, reset a hidden field indicator, and submit the form naturally so that the user does not have an unpleasant experience. I planned on using window.onerror to do this, but it is never firing! I am using IE8 and all I have to worry about is the IE browser. Is there some gotcha to getting this event to work? Here's my code...

window.onerror = function() {
  alert("Error!");
  document.getElementById("hidAjax").value = "0";
  document.forms[0].submit();
}
A: 

Any reason not to just put a try/catch around the tricky code?

Annie
There's a *ton* of code; it's split up into many functions across many files.
Josh Stodola
try/catch doesn't work with asynch requests.
Roatin Marth
+2  A: 

"A common problem that bites many developers occurs when their onerror handler is not called because they have script debugging enabled for Internet Explorer. This will be the case by default if you have installed the Microsoft Script Debugger or Microsoft Visual Studio 6.0® (specifically Visual InterDev 6.0™)—onerror handling is how these products launch their debugger. You can disable script debugging for a given instance of Internet Explorer on the Advanced tab of the Internet Options dialog box (note that checking the Disable script debugging setting will apply only to that instance of Internet Explorer):"

http://msdn.microsoft.com/en-us/library/ms976144.aspx

MikeEL
Shoot, I didn't even think about that! So will my users have to have this setting disabled?
Josh Stodola
Yes, and since you can't depend on their environment, you will have to find some other way to do this. try/catch, would probably work out very well for you, with the catch block containing everything in your current onerror function.
MikeEL
just read your other comment... perhaps you could query your user base, and see if they have this set? if its only a small set of users in this case, you can set it as a stipulation that they need to turn it off. You should also be able to check if they have that set, and pop up an informative message for them on what to do to turn it off.
MikeEL
Crap. Time to write a program to wrap every function body with a try/catch. There's far too much code to do it manually. This ought to be fun!
Josh Stodola