【问题标题】:IE javascript redirectionIE JavaScript 重定向
【发布时间】:2013-10-05 19:11:45
【问题描述】:

我有一个将用户重定向到差异页面的 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 的那些令人麻木的特质之一......

【问题讨论】:

  • 您正在为 IE4 和 Netscape 进行设计??

标签: javascript internet-explorer internet-explorer-6


【解决方案1】:

这个功能完全是浪费时间。分配给location.href 在所有当前存在的浏览器中同样有效。 this.browserClass.isNN4 暗示这段代码正在担心本世纪不存在的东西。好像臭臭的旧浏览器嗅探还不够糟糕。 (不管怎样,即使在 Netscape 中,这两个任务都有效。)

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

尽量不要将字符串传递给setTimeout,这与eval 的问题相同(例如,您的URL 包含撇号...繁荣)。传递一个函数,必要时传递一个内联函数 (setTimeout(function() { location.href= url; }, 0);)。

但是,这对我来说是什么感觉是您在链接上捕获了 click 或 mousedown 事件,而不是取消事件(通过从事件处理程序返回 false)。因此,默认操作之后的链接可能会出现,并且可能会根据浏览器覆盖location.href 导航。

【讨论】:

  • setTimeOut 修复也对我有用。 IE 并没有明显地使用 location.href 更新 URL,尽管我认为 URL 可能实际上已经更改,但您无法为其添加书签或看到新的 URL(奇怪)。它在一个 jQuery 点击事件中,但我用 event.preventDefault 取消,我也尝试返回 false。
【解决方案2】:

如果您不关心 Web 浏览器保留历史记录(后退和前进按钮),只需使用 javascript location.replace(url) 函数,否则您始终可以使用 location.href 属性。

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

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

我不记得 document.location 在 IE6 中是否仍然有效(我之前退出了 IE6)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2011-12-01
    相关资源
    最近更新 更多