设置window.location.hash的潜在问题

时间:2009-08-11 23:22:15

标签: javascript cross-browser rsh

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

另外,我正在使用ReallySimpleHistory。这会搞乱其内部状态吗?

由于

5 个答案:

答案 0 :(得分:25)

自从1995年在Netscape Navigator 2中引入JavaScript以来,已经出现了{p> window.location.hash。它于1996年首次得到Microsoft在Internet Explorer 3中的支持。我认为你可以合理地确定每个支持JS的浏览器都支持它

从快速浏览源代码看,ReallySimpleHistory看起来好像广泛使用了这个属性,所以你可能会破坏它。您可能希望使用其add(newLocation)方法(通过设置window.location.hash)。

答案 1 :(得分:15)

获取:

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

设置:

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

答案 2 :(得分:10)

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

IE会给你错误: SCRIPT5 - Access denied.如果您尝试分配超出限制的哈希值 这是非常有用的。

只是值得深思。

答案 3 :(得分:4)

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

请参阅my Usenet post on comp.lang.javascript,我会在其中详细解释一下。

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

答案 4 :(得分:3)

设置window.location.hash在IE6& IE7。

在某些情况下,在一组之后立即在IE6下阅读window.location.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);

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