How can I detect changes in location hash?(如何检测位置散列中的更改?)
问题描述
我使用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。
这篇关于如何检测位置散列中的更改?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何检测位置散列中的更改?
- 在不使用循环的情况下查找数字数组中的一项 2022-01-01
- 如何调试 CSS/Javascript 悬停问题 2022-01-01
- 从原点悬停时触发 translateY() 2022-01-01
- 我不能使用 json 使用 react 向我的 web api 发出 Post 请求 2022-01-01
- 如何显示带有换行符的文本标签? 2022-01-01
- 为什么悬停在委托事件处理程序中不起作用? 2022-01-01
- 为什么我的页面无法在 Github 上加载? 2022-01-01
- 使用 iframe URL 的 jQuery UI 对话框 2022-01-01
- 如何向 ipc 渲染器发送添加回调 2022-01-01
- 是否可以将标志传递给 Gulp 以使其以不同的方式 2022-01-01