如何检测位置散列中的更改?
我使用Ajax和哈希进行导航。
有没有办法检查window.location.hash
是否像这样更改?
http://example.com/blah#123至http://example.com/blah#456
如果我在文档加载时选中它,它会起作用。
但是如果我有基于#hash的导航,那么当我在浏览器上按Back按钮时就不能工作(所以我从blah#456跳到blah#123)。
它显示在地址框中,但我无法用JavaScript捕获它。
解决方案
真正做到这一点的唯一方法(也就是‘reallysimpleHistory’如何做到这一点)是通过设置一个持续检查当前哈希的时间间隔,并将其与以前的哈希进行比较,我们这样做,并让订阅者订阅我们在哈希更改时触发的更改事件。这并不完美,但浏览器本身确实不支持此事件。
更新以使此答案保持新鲜:
如果您使用的是jQuery(对于大多数人来说,jQuery现在应该是基础的),那么一个很好的解决方案就是使用jQuery提供的抽象,使用它的事件系统来侦听窗口对象上的hashchange事件。
$(window).on('hashchange', function() {
//.. work ..
});
这里的好处是您可以编写甚至不需要担心hashchange支持的代码,但是您确实需要使用一些不太出名的jQuery功能jQuery special events。
使用此功能,您基本上可以在有人首次尝试以任何方式使用事件(如绑定到事件)时,为任何事件运行一些设置代码。
在此安装代码中,您可以检查本机浏览器支持,如果浏览器没有本机实现此功能,您可以设置单个计时器来轮询更改,并触发jQuery事件。
这使您的代码完全不需要理解这个支持问题,这种特殊事件的实现是微不足道的(要获得一个简单的98%工作版本),但是为什么要这样做when somebody else has already。
相关文章