该 导航到会话历史记录条目时,事件在某些情况下被解雇。
据此,当您使用时,没有理由触发popstatepushState
。但是这样的事件pushstate
会派上用场。因为history
是宿主对象,所以您应该小心使用它,但是在这种情况下,Firefox看起来不错。这段代码可以正常工作:
(function(history){
var pushState = history.pushState;
history.pushState = function(state) {
if (typeof history.onpushstate == "function") {
history.onpushstate({state: state});
}
// ... whatever else you want to do
// maybe call onhashchange e.handler
return pushState.apply(history, arguments);
};
})(window.history);
window.onpopstate = history.onpushstate = function(e) { ... }
您可以window.history.replaceState
用相同的方式修补猴子。
注意:当然,您可以onpushstate
简单地将其添加到全局对象,甚至可以通过以下方式使它处理更多事件:add/removeListener