我有一个javascript函数,可以将用户重定向到diff页面。就像这样......
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;
},
但问题是这在IE(Internet Explorer 6.X)中不起作用。经过一场短暂的战斗后,当我将代码更改为此时,我看到IE正在重定向 -
if (this.browserClass.isW3C)
setTimeout("location.href = '" +url+"'", 0);
问题解决了。但是这里发生了什么?有人可以教育我吗?或者它只是IE的那些令人头脑麻木的特质之一......
答案 0 :(得分:4)
这个功能完全是浪费时间。对location.href
的分配在所有当前现存的浏览器中同样有效。 this.browserClass.isNN4
暗示这段代码令人担心本世纪不存在的东西。好像是臭旧的浏览器嗅探还不够糟糕。 (无论如何,即使在Netscape中,这两项任务都有效。)
setTimeout("location.href = '" +url+"'", 0);
尽量不要将字符串传递给setTimeout
,它与eval
具有相同的问题(例如,您的网址包含撇号...繁荣)。如果需要,传递函数,内联函数(setTimeout(function() { location.href= url; }, 0);
)。
然而,这对我来说有什么味道是你在链接上捕获click
或mousedown
事件,而不是取消事件(通过从事件处理程序返回false
) 。因此,可以发生默认操作后的链接,并且可能会根据浏览器覆盖location.href
导航。
答案 1 :(得分:0)
如果您不关心保持历史记录的Web浏览器(后退和前进按钮),只需使用javascript location.replace(url)
函数,否则您始终可以使用location.href
属性。
来源:http://www.roseindia.net/javascript/javascript-location-replace.shtml
window.location(如果我没记错的话)是一个对象而不是字符串属性。
我不记得document.location在IE6中是否仍然有效(我退出IE6 yonkers前)。