2010-01-20 73 views
0

我有一个JavaScript函数,它将用户重定向到一个diff页面。它是这样的...IE javascript重定向

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的那些令人麻木的特质之一...

+1

你正在为IE4和* Netscape *设计? – nickf 2010-01-20 03:25:02

回答

4

此功能是一个完全浪费时间。分配到location.href在所有目前现存的浏览器中工作得很好。 this.browserClass.isNN4暗示此代码正在担心本世纪不存在的内容。仿佛正在臭嗅旧浏览器嗅探不够糟糕。 (反正即使在Netscape中,这两个任务的工作。)

setTimeout("location.href = '" +url+"'", 0); 

尽量不要字符串传递给setTimeout,这是同样的事情eval相同的所有问题(例如,您的网址中包含撇号......咚)。如果需要,传递一个函数,一个内联函数(setTimeout(function() { location.href= url; }, 0);)。

但是这是什么闻起来像我就是你的链接诱捕clickmousedown事件,并没有取消该事件(从事件处理程序返回false)。因此,可能会发生默认操作后的链接,并可能取决于浏览器覆盖location.href导航。

+0

setTimeOut修复程序也适用于我。虽然我认为URL可能实际上已经改变,但IE不能通过location.href来更新URL,但是你不能将它加入书签或看到新的URL(奇怪)。它在一个jQuery点击事件中,但我取消了event.preventDefault,我也尝试返回false。 – johna 2013-02-25 01:26:23

0

如果你是不是Web浏览器保存的历史(前进和后退按钮)的关注,只是使用JavaScript location.replace(url)功能否则你可以一直使用location.href属性。

来源:http://www.roseindia.net/javascript/javascript-location-replace.shtml

的window.location的(如果我记错)是一个对象,而不是一个字符串属性。

我不记得document.location在IE6中是否仍然有效,但是(我之前放弃了IE6 yonkers)。