2012-07-07 70 views
0

所以我们可以说,你有这样的URL:http://yoursite.com/#stackoverflow让浏览器重新加载时用户将哈希到URL

如果我输入一个新的哈希到地址栏,它会尝试在网页上找到该ID。有没有办法(可能用javascript?)检测浏览器活动,然后强制页面重新加载该URL?

谢谢!

+3

注意,这不是一个特别好的主意。哈希不会被发送到服务器,因为它*不*应该导致获取不同的资源:) – hobbs 2012-07-07 18:30:11

回答

1

您需要绑定到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); 
} 
+0

对此的浏览器支持是什么样的? – alt 2012-07-07 18:27:42

+0

@JacksonGariety http://caniuse.com/hashchange – James 2012-07-07 18:29:23

+0

哇,感谢您编写代码!很酷。 – alt 2012-07-07 18:31:16

0

在较新的浏览器上,您可以使用hashchange event。实际上对它的支持是pretty good。在较旧的浏览器上,您必须轮询location.hash(例如,使用setIntervalsetTimeout)。

+0

通过轮询,我该如何防止它不断地刷新? Ionly希望在URL更改时进行刷新。 – alt 2012-07-07 18:26:40

+0

@JacksonGariety:1.开始轮询时,将初始散列存储在变量中。 2.在轮询功能中,将当前的'location.hash'与您存储的名称进行比较。 3.重新加载,如果他们不同。 :-) – 2012-07-07 18:27:51

+0

@JacksonGariety:请参阅上面的链接,了解有关'hashchange'的浏览器支持。 – 2012-07-07 18:29:00

相关问题