【问题标题】:Potential problems setting window.location.hash设置 window.location.hash 的潜在问题
【发布时间】:2010-11-18 19:25:04
【问题描述】:

我有一些 javascript 代码,在某一时刻,将 window.location.hash 设置为特定字符串。这在 Firefox 3 中运行良好,但我想知道我以后是否会遇到问题,即这是一个跨浏览器解决方案(包括 IE6)吗?

另外,我正在使用ReallySimpleHistory。这会扰乱它的内部状态吗?

谢谢

【问题讨论】:

    标签: javascript cross-browser rsh


    【解决方案1】:

    获取:

     var hash = location.hash.slice(1);
    

    设置:

     location.hash = '#' + 'string';
    

    【讨论】:

    • 为什么不直接使用 location.hash 属性?这就是它的用途,而且它自 Netscape Navigator 2 (1995) 以来就一直存在,您可以打赌它在任何地方都受到支持。
    • 我更新了答案以使用location.hash 而不是location.href,和.slice(1) 而不是.split[1],即more bulletproof
    • 注意,有些浏览器在设置哈希时要求前面的'#'。简单地设置 window.location.hash = 'foo' 将导致 example.com/foo 而不是 example.com/#foo。
    【解决方案2】:

    设置 window.location.hash 在 IE6 和 IE7 中可以正常工作。

    在某些情况下,在IE6下读取window.location.hash在set后会返回旧值,但浏览器已经设置hash成功。一个例子:

    alert(window.location.hash);
    window.location.hash = '#newHash';
    
    /* Sometimes, it will return the old value,
       I haven't figured out why it does that, and
       it's rather rare. */
    alert(window.location.hash);
    

    如果你只是用它来设置它,你应该不会遇到任何问题。

    【讨论】:

      【解决方案3】:

      window.location.hash 早在 1995 年在 Netscape Navigator 2 中引入 JavaScript 就已经存在。1996 年 Microsoft 在 Internet Explorer 3 中首次支持它。我认为您可以合理地确定每个支持 JS 的浏览器都支持它。

      快速浏览源代码,ReallySimpleHistory 似乎非常广泛地使用了这个属性,所以你很可能会破坏它。您可能想改用它的add(newLocation) 方法(通过设置window.location.hash 来工作)。

      【讨论】:

      • 谢谢。我故意避免使用 add() 方法,因为我愚蠢地想避免设置历史记录点,但事实证明这是不可能的
      【解决方案4】:

      所有“现代”(a.k.a A-Graded)浏览器都允许设置哈希并且在这样做时不会重新加载页面。 会重新加载页面的是一些较旧的版本,例如 Safari 2.0.4Opera 8.5x

      请参阅my Usenet post on comp.lang.javascript,我会更详细地解释它。

      另请注意,HTML5 最终指定哈希设置器应更改实际哈希但不重新加载页面

      【讨论】:

        【解决方案5】:

        我知道旧线程,但window.location.hash 也受到大小限制。如果您要传递大量数据,并希望在哈希中保存状态,则可能会遇到一些问题。

        IE 会给你错误: SCRIPT5 - Access denied. 如果您尝试分配超过限制的哈希 超级好用。

        只是思考的食物。

        【讨论】:

        • 谢谢,很有帮助。尝试在IE中直接输入url时,如果太长,就“干脆”切...
        • 很棒的信息。这就是我遇到的问题。
        • 谢谢!那正是我们的问题。太糟糕了,错误消息提供了这么少的细节。首先我们在LocalStorage等其他地方搜索了很长时间的错误。
        猜你喜欢
        • 2011-11-12
        • 1970-01-01
        • 2011-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多