I have a javascript function which redirects user to a diff page. It goes like this…
redirect : function(url)
{
if(!url)
return false;
alert(url);
if (this.browserClass.isW3C) //IE 6.X comes here
{
window.location.href = url;
}
else if(this.browserClass.isIE4)
{
window.location.href = url;
}
else if (this.browserClass.isNN4)
{
window.location = url;
}
else
{
window.location = url;
}
return false;
},
But the problem is that this does not work in IE (internet explorer 6.X). After a short battle I saw that IE was redirecting when I change the code to this –
if (this.browserClass.isW3C)
setTimeout("location.href = '" +url+"'", 0);
Problem is solved. But what’s going on here? Could someone educate me? or is it just one of those mind numbing idiosyncrasies of IE…
This function is a complete waste of time. Assignment to
location.hrefworks equally well in all currently extant browsers.this.browserClass.isNN4is a hint that this code is worrying about stuff that doesn’t exist in this century. As if being stinky old browser-sniffing wasn’t bad enough. (Anyway even in Netscape, both these assignments worked.)Try not to pass strings to
setTimeout, it’s the same thing asevalwith all the same problems (eg. your URL contains an apostrophe… boom). Pass a function, an inline one if necessary (setTimeout(function() { location.href= url; }, 0);).However what this smells like to me is you’re trapping a
clickormousedownevent on a link, and not cancelling the event (by returningfalsefrom the event handler). Consequently the link following default action can occur and may, depending on browser, override thelocation.hrefnavigation.