一尘不染

开启-window.location.hash-更改了吗?

javascript

我正在使用Ajax和哈希进行导航。

有没有办法检查这种window.location.hash变化是否?

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

如果我在加载文档时检查它,它将起作用。

但是,如果我具有基于#hash的导航,则在按浏览器上的“后退”按钮时将不起作用(因此我从blah#456跳到blah#123)。

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


阅读 380

收藏
2020-04-25

共1个答案

一尘不染

真正做到这一点的唯一方法(以及“reallysimplehistory”的实现方式)是通过设置一个间隔来保持检查当前哈希值,并将其与之前的哈希值进行比较,然后执行此操作,并让订阅者订阅更改后的内容如果哈希发生变化,我们将触发该事件。它并不完美,但浏览器实际上并不原生支持此事件。


更新以使此答案保持最新:

如果您使用的是jQuery(今天对于大多数人来说应该是基础的),那么一个不错的解决方案是使用jQuery通过使用其事件系统侦听window对象上的hashchange事件为您提供的抽象。

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

这里的好处是,您可以编写甚至不需要担心hashchange支持的代码,但是您确实需要做一些魔术,以一种鲜为人知的jQuery特性jQuery特殊事件的形式。

使用此功能,您基本上可以为任何事件运行一些设置代码,这是有人第一次尝试以任何方式(例如绑定到事件)使用该事件。

在此安装代码中,您可以检查是否支持本机浏览器,如果浏览器不是本机实现的,则可以设置单个计时器以轮询更改并触发jQuery事件。

这完全不需要您的代码来理解这个支持问题,这种特殊事件的实现是微不足道的(获得简单的98%工作版本),但是当别人已经这样做时为什么要这样做。

2020-04-25