2013-11-26 10 views
1

我已經搜索谷歌和在這個論壇上的其他一些問題,但它似乎沒有回答我的問題。基於MDN https://developer.mozilla.org/en-US/docs/Web/API/window.onpopstatejavascript onpopstate替代與onhashchange相同的功能

注意,只是打電話history.pushState()history.replaceState()不會引發popstate事件。 popstate事件只能通過瀏覽器操作觸發,例如點擊後退按鈕(或在JavaScript中調用history.back())。而且,只有當用戶在同一文檔的兩個歷史記錄條目之間導航時纔會觸發該事件。

進出口尋找替代onpopstate具有相同的功能爲window.onhashchangehttps://developer.mozilla.org/en-US/docs/Web/API/Window.onhashchange)當URL改變,將觸發事件。

您想分享您的解決方案嗎?

回答

1

我想你可能會使用「History.js」工具,它提供了一個「statechange」事件,你可以聽。當按下前進/後退按鈕或使用pushState/replaceState時,該工具會觸發該事件。

https://github.com/browserstate/history.js/

當然,現在你已經換了一個不同的問題,這是你有事件被解僱兩種類型的操作,你經常要對它們進行區分,這就是比較困難。所以你必須破解你自己的解決方案來區分它們。大多數人似乎設置了一些全局標誌,只要他們打算調用pushState/replaceState,然後在事件處理程序中檢查這個標誌。如果標誌已設置,則事件來自您自己的代碼,如果沒有,則來自瀏覽器按鈕。

+0

非常感謝你在這裏拜訪過的@凱爾辛普森先生。 我不會使用外部庫來做簡單的事情。 但你是真實的,應該破解我自己的解決方案。我創建了自己的pushState版本。然後,創建將由'onpopstate'和我自己的pushState調用的Router函數 – plainjavascript