因此,既然HTML5引入history.pushState
了更改浏览器历史记录的方法,那么网站开始将其与Ajax结合使用,而不是更改URL的片段标识符。
可悲的是,这意味着这些呼叫无法再由来检测onhashchange
。
我的问题是:是否有可靠的方法(黑客?;))来检测网站何时使用history.pushState
?该规范未声明有关引发的事件的任何信息(至少我找不到任何东西)。
我试图创建一个Facade,并window.history
用我自己的JavaScript对象替换了它,但是它根本没有任何效果。
进一步的说明:我正在开发一个Firefox插件,需要检测这些更改并采取相应措施。
我知道几天前有一个类似的问题,询问是否可以有效地侦听某些DOM事件,但我宁愿不依赖于此,因为可以出于许多不同的原因来生成这些事件。
更新:
这是一个jsfiddle(使用Firefox 4或Chrome 8),显示onpopstate
在pushState
调用时不会触发(或者我做错了吗?随时进行改进!)。
更新2:
另一个(侧面)问题是window.location
使用时未更新pushState
(但我认为我已经在此处阅读过此信息)。
history
对象。在这种情况下,这可能是不必要的。