2016-03-03 46 views
2

我有一個主頁,您可以將其他頁面加載到容器中。 加載頁面時,您仍然位於主頁面上,但瀏覽器URL應設置爲加載頁面的URL。 當關閉加載的頁面時,URL應重置爲主頁面的url。防止在window.history中的重複實例

我想通過簡單地使用history.replaceStatepushState解決此問題,而不必返回瀏覽器歷史記錄(因爲返回會導致一些瀏覽器刷新和滾動滾動)。

我目前的解決方案是

clickLoadPage => (pageUrl) { 
    closeOtherLoadedPages(); 
    if (isOnMainPage()) 
     pushState(pageUrl) 
    else 
     replaceState(pageUrl) 
} 
clickUnloadPage =>() { 
    replaceState(mainpageUrl); 
} 

注:它的設計,只有在任何時候加載一個頁面。例如:第一個加載頁面1。然後加載page2。期望的效果:page1關閉,url被page2取代。在該狀態下,在瀏覽器中返回將返回到主頁面的URL。

問題是,每當你加載一個新頁面,然後關閉它,一個帶有主頁面的新狀態被添加到窗口歷史記錄中。應該只有這些國家中的一個,但我最終有幾個。

是否有可能通過其他方式解決這個問題?我不熟悉window.history api,是否可以執行諸如刪除狀態或確保不添加重複狀態的操作?

回答

0

當頁面關閉時,您可以撥打history.back()方法從歷史記錄中彈出狀態,因此網址將更改爲上一個。

如果您打開第1頁並打開第2頁,則需要調用方法將已打開的頁面關閉到歷史記錄中的彈出狀態,並且只有在打開另一頁面後才能打開。

+0

我用這個解決方案,是避免添加太多歷史狀態的唯一方法。 – Drkawashima

+0

對於閱讀此內容的其他人來說只是一個提示:當您使用替換和返回多次導航到相同的URL時,您推送或替換到window.history的每個instants必須是唯一的 - 否則API似乎認爲它們是重複,你可以得到一個奇怪的行爲爲後退按鈕。我通過將datetime.now添加到我在window.history中推/替換的所有對象來解決此問題 – Drkawashima