所以我们可以说,你有这样的URL:http://yoursite.com/#stackoverflow让浏览器重新加载时用户将哈希到URL
如果我输入一个新的哈希到地址栏,它会尝试在网页上找到该ID。有没有办法(可能用javascript?)检测浏览器活动,然后强制页面重新加载该URL?
谢谢!
所以我们可以说,你有这样的URL:http://yoursite.com/#stackoverflow让浏览器重新加载时用户将哈希到URL
如果我输入一个新的哈希到地址栏,它会尝试在网页上找到该ID。有没有办法(可能用javascript?)检测浏览器活动,然后强制页面重新加载该URL?
谢谢!
您需要绑定到hashchange
事件:
window.onhashchange = function() {
window.location.reload();
};
小心,但:一些旧的浏览器不支持此事件(see this),所以您需要为那些填充工具。
下面是一个例子加上旧的浏览器轮询技术:
if ('onhashchange' in window) {
window.onhashchange = function() {
window.location.reload();
};
} else {
var hash = window.location.hash;
setInterval(function() {
if (window.location.hash !== hash) {
window.location.reload();
}
}, 100);
}
在较新的浏览器上,您可以使用hashchange
event。实际上对它的支持是pretty good。在较旧的浏览器上,您必须轮询location.hash
(例如,使用setInterval
或setTimeout
)。
通过轮询,我该如何防止它不断地刷新? Ionly希望在URL更改时进行刷新。 – alt 2012-07-07 18:26:40
@JacksonGariety:1.开始轮询时,将初始散列存储在变量中。 2.在轮询功能中,将当前的'location.hash'与您存储的名称进行比较。 3.重新加载,如果他们不同。 :-) – 2012-07-07 18:27:51
@JacksonGariety:请参阅上面的链接,了解有关'hashchange'的浏览器支持。 – 2012-07-07 18:29:00
@ 999的答案只是这个更轻量级的版本。感谢寿! – alt 2012-07-07 18:43:59
注意,这不是一个特别好的主意。哈希不会被发送到服务器,因为它*不*应该导致获取不同的资源:) – hobbs 2012-07-07 18:30:11