问题

我使用Ajax和哈希导航.

有没有办法检查 window.location.hash 是否改变了这样?

http://example.com/blah #123 http://example.com/blah #456

如果我在文档加载时检查它,它会工作.

但是如果我有#hash导航它不工作,当我按浏览器上的后退按钮(所以我跳从blah#456到blah#123).

它显示在地址框内,但我无法用JavaScript捕获它.



解决方法

真正做到这一点(以及'reallysimplehistory'是如何做到这一点)的唯一方法是通过设置一个间隔,保持检查当前的哈希,并将其与之前的比较,我们这样做,让订阅者订阅到一个改变的事件,我们火如果哈希改变..它不完美,但浏览器真的不支持这个事件本机.


更新以保持此答案清新:

如果你使用的jQuery(今天应该有点基本的大多数),一个很好的解决方案是使用jQuery给你的抽象,通过使用它的事件系统来侦听窗口对象上的哈希交换事件.

$(window).on('hashchange', function() {
  //.. work ..
});

这里的好处是你可以编写代码,甚至不需要担心hashchange支持,但是你需要做一些魔术,以一个稍微不太熟悉的jQuery特性的形式 jQuery特殊事件.

有了这个功能,你基本上可以为任何事件运行一些设置代码,第一次有人尝试以任何方式使用事件(如绑定到事件).

在此设置代码中,您可以检查本机浏览器支持,如果浏览器本身不实现这一点,您可以设置一个计时器轮询更改,并触发jQuery事件.

这完全解除了你的代码需要理解这个支持问题,这种特殊事件的实现是微不足道的(为了得到一个简单的98%的工作版本),但为什么其他人已经.




相关问题推荐