【发布时间】:2010-11-18 19:25:04
【问题描述】:
我有一些 javascript 代码,在某一时刻,将 window.location.hash 设置为特定字符串。这在 Firefox 3 中运行良好,但我想知道我以后是否会遇到问题,即这是一个跨浏览器解决方案(包括 IE6)吗?
另外,我正在使用ReallySimpleHistory。这会扰乱它的内部状态吗?
谢谢
【问题讨论】:
标签: javascript cross-browser rsh
我有一些 javascript 代码,在某一时刻,将 window.location.hash 设置为特定字符串。这在 Firefox 3 中运行良好,但我想知道我以后是否会遇到问题,即这是一个跨浏览器解决方案(包括 IE6)吗?
另外,我正在使用ReallySimpleHistory。这会扰乱它的内部状态吗?
谢谢
【问题讨论】:
标签: javascript cross-browser rsh
获取:
var hash = location.hash.slice(1);
设置:
location.hash = '#' + 'string';
【讨论】:
location.hash 而不是location.href,和.slice(1) 而不是.split[1],即more bulletproof。
window.location.hash = 'foo' 将导致 example.com/foo 而不是 example.com/#foo。
设置 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);
如果你只是用它来设置它,你应该不会遇到任何问题。
【讨论】:
window.location.hash 早在 1995 年在 Netscape Navigator 2 中引入 JavaScript 就已经存在。1996 年 Microsoft 在 Internet Explorer 3 中首次支持它。我认为您可以合理地确定每个支持 JS 的浏览器都支持它。
快速浏览源代码,ReallySimpleHistory 似乎非常广泛地使用了这个属性,所以你很可能会破坏它。您可能想改用它的add(newLocation) 方法(通过设置window.location.hash 来工作)。
【讨论】:
所有“现代”(a.k.a A-Graded)浏览器都允许设置哈希并且在这样做时不会重新加载页面。 会重新加载页面的是一些较旧的版本,例如 Safari 2.0.4 和 Opera 8.5x。
请参阅my Usenet post on comp.lang.javascript,我会更详细地解释它。
另请注意,HTML5 最终指定哈希设置器应更改实际哈希但不重新加载页面。
【讨论】:
我知道旧线程,但window.location.hash 也受到大小限制。如果您要传递大量数据,并希望在哈希中保存状态,则可能会遇到一些问题。
IE 会给你错误:
SCRIPT5 - Access denied. 如果您尝试分配超过限制的哈希
超级好用。
只是思考的食物。
【讨论】: