为了账号安全,请及时绑定邮箱和手机立即绑定

在窗口。位置.变化?

在窗口。位置.变化?

慕森卡 2019-06-05 14:47:42
在窗口。位置.变化?我使用Ajax和哈希进行导航。是否有方法检查window.location.hash就这样改变了?http://example.com/blah#123到http://example.com/blah#456如果我在加载文档时检查它,它就能工作。但是如果我有基于#散列的导航,当我按下浏览器上的后退按钮(所以我从blah#456跳到blah#123)时,它就不能工作了。它显示在地址栏中,但我无法用JavaScript捕捉它。
查看完整描述

3 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

真正做到这一点的唯一方法(也就是‘ReallysimpleHistory’如何做到这一点),是通过设置一个时间间隔来检查当前的散列,并将其与以前的哈希进行比较,我们这样做并让订阅者订阅我们在哈希更改时触发的更改事件。它并不完美,但浏览器实际上并不支持这个事件。


更新以保持此答案新鲜:

如果您正在使用jQuery(对于大多数人来说,jQuery现在应该是基础的),那么一个很好的解决方案就是使用jQuery提供的抽象,使用它的事件系统来侦听窗口对象上的散列事件。

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

这里的好处是,您可以编写甚至不需要担心hashchange支持的代码,但是您确实需要做一些神奇的工作,其形式是不太为人所知的jQuery特性。

通过这个特性,您基本上可以为任何事件运行一些设置代码,这是第一次有人试图以任何方式使用事件(例如绑定到事件)。

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

这完全解除了您的代码对此支持问题的理解,这类特殊事件的实现非常简单(获得一个简单的98%的工作版本),但为什么要这样做呢?


查看完整回答
反对 回复 2019-06-05
?
jeck猫

TA贡献1909条经验 获得超7个赞

HTML 5指定hashchange事件..这个事件现在所有现代浏览器都支持..在下列浏览器版本中添加了支持:

  • Internet Explorer 8
  • Firefox 3.6
  • 铬5
  • 狩猎5
  • 歌剧10.6


查看完整回答
反对 回复 2019-06-05
  • 3 回答
  • 0 关注
  • 560 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信