3 回答

TA貢獻1802條經驗 獲得超10個贊
5.5.9.1事件定義
該popstate導航到會話歷史記錄條目時,事件在某些情況下被解雇。
據此,當您使用時,沒有理由觸發popstate pushState。但是這樣的事件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);
您的jsfiddle 變為:
window.onpopstate = history.onpushstate = function(e) { ... }
您可以window.history.replaceState用相同的方式修補猴子。
注意:當然,您可以onpushstate簡單地將其添加到全局對象,甚至可以通過以下方式使它處理更多事件:add/removeListener
添加回答
舉報