我正在使用Ajax和hash进行导航.
有没有办法检查是否window.location.hash改变了这样?
http://example.com/blah #123到http://example.com/blah #456
如果我在文档加载时检查它,它可以工作.
但是如果我有基于#hash的导航,那么当我按下浏览器上的后退按钮时它就不起作用了(所以我从#456跳到了#123).
它显示在地址框内,但我无法用JavaScript捕获它.
javascript ajax javascript-events fragment-identifier hashchange
因此,现在HTML5引入history.pushState了更改浏览器历史记录,网站开始将其与Ajax结合使用,而不是更改URL的片段标识符.
可悲的是,这意味着不再能够检测到这些呼叫了onhashchange.
我的问题是:是否有可靠的方法(黑客?;))来检测网站何时使用history.pushState?规范没有说明引发的事件(至少我找不到任何东西).
我尝试创建一个外观并替换window.history为我自己的JavaScript对象,但它根本没有任何效果.
进一步说明:我正在开发一个需要检测这些更改并相应操作的Firefox附加组件.
我知道几天前有一个类似的问题,询问听一些DOM事件是否有效但我宁愿不依赖它,因为这些事件可能由于很多不同的原因而产生.
更新:
这是一个jsfiddle(使用Firefox 4或Chrome 8),显示调用onpopstate时不会触发pushState(或者我做错了什么?随意改进它!).
更新2:
另一个(侧面)问题是window.location在使用时没有更新pushState(但我已经在这里读到了这个,我认为).
如何检查JavaScript中的URL是否已更改?例如,使用AJAX的GitHub等网站会在#符号后附加页面信息,以创建唯一的URL而无需重新加载页面.检测此URL是否更改的最佳方法是什么?
onload再次调用事件?我正在撰写Chrome扩展程序,因此我需要能够收听YouTube网址中的更改(即,看到您切换了视频).YouTube使这很难,因为HTML5视频播放器没有完整的页面重新加载,没有更改URL片段(不能像其他答案所建议的那样监听hashchange事件).听pushState也不起作用.我花了很多时间在这里寻找答案,以及迄今为止我见过的所有答案(除了一个 - 我真的不想使用)不起作用.
我见过的唯一答案是设置超时以每秒运行一次以查看URL是否发生了变化(丑陋!).
编辑:可能重复的问题是一个完全不同的问题 - 一个处理收听URL更改另一个涉及获取扩展加载.
问题:如何在不轮询的情况下检测YouTube HTML5视频播放器中的网址更改?