history.pushState
来改变浏览器历史记录,网站开始将其与Ajax结合使用,而不是更改URL的片段标识符。可悲的是,这意味着无法再通过onhashchange
检测这些调用。我的问题是:有没有可靠的方法(黑客?;))来检测网站何时使用
history.pushState
?规范没有说明任何被引发的事件(至少我找不到)。我尝试创建一个外观,并替换window.history
为自己的JavaScript对象,但它根本没有任何效果。进一步说明:我正在开发一个Firefox插件,需要检测这些更改并相应地采取行动。我知道几天前有一个类似的问题,问是否监听一些DOM事件会很有效,但我宁愿不依赖于它们,因为这些事件可能由许多不同的原因生成。
更新: 这里有一个jsfiddle(使用Firefox 4或Chrome 8),显示当调用
pushState
时不会触发onpopstate
(或者我做错了什么?请随意改进!)。更新2:
另一个(次要的)问题是在使用pushState时,window.location没有更新(但我认为我已经在SO上读到过这个问题)。