2014-12-19 111 views
3

我在我的網站上有類似Facebook的照片瀏覽器的彈出窗口模式。當模式打開時,它將顯示來自其他頁面的內容,我想更改地址欄值和歷史記錄以顯示此內容。如何修改facebook的照片查看器的歷史記錄?

模式中有一個下拉框將模態中的內容更改爲不同頁面的內容。發生這種情況時,我再次想要更改地址欄值和歷史記錄以顯示頁面已更改。

從本質上講,我想正是複製Facebook的照片瀏覽器中,您可以通過嘗試行爲:

  1. Clicking on this link
  2. 點擊Photos
  3. 點擊頁面上的照片
  4. 單擊向右或向左箭頭(或使用鍵盤上的箭頭鍵)更改內部值
  5. a)單擊在瀏覽器中
  6. B)前進和後退歷史記錄按鈕點擊了圖片瀏覽器

我試圖創建一個的jsfiddle來展示我在這個地方,但的jsfiddle顯然不會讓歷史被操縱。因此,我已經把my code online hereyou can download from here


幾個關鍵點:

  • 開始通過查看索引頁,然後使用鏈接轉到測試頁
  • 當模式被關閉時,按下後退按鈕應該不是重新打開模式,而是應該帶你回到索引頁面。
  • 在URL關閉模式,按下正向按鈕應該重新打開該模式在它的原始狀態Facebook的照片瀏覽器不
  • 在我的生產代碼,完整的URL將被改變,而不是添加/更改一個變量後在演示代碼所示
+3

'replaceState'呢? –

+1

你已閱讀該頁面?你錯過了['popstate'事件](https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history#The_popstate_event)嗎? –

+0

@ Karl-AndréGagnon也許我的閱讀速度太快了,但是在我看來,'popstate'是一種你所捕捉的事件,而不是你稱之爲從歷史中刪除某個項目的功能。 – Nate

回答

4

你必須使用歷史API,尤其你有那麼當用戶打開你可以做一些模態使用history.pushState()history API

history.pushState(stateObj, "page 2", "image\id.html"); 

其中:stateObj是您通過歷史記錄傳遞的對象,第2頁是標題,最後一個參數是您要修改的URL。

完成之後,您必須使用popstate event,因爲瀏覽器「後退」和「前進」按鈕不會重新加載頁面。

+0

是的,我已經嘗試了歷史功能的各種事情,但似乎無法複製Facebook的行爲。我遇到的主要問題是關閉模式時,我希望後退按鈕使瀏覽器回到上一頁,而不是重新打開模式,但我無法弄清楚如何執行此操作。請查看我發佈的演示,並查看Facebook的行爲。 +1雖然。 – Nate

+1

@Nate關閉窗口時不要執行pushState,因爲它會在歷史記錄中插入一個新插入,執行window.history.back()並檢查當您打開模式window.history.length應該增加+1,當你關閉它應該減少-1不會增加。 – Burimi

+0

這回答了一半的問題。當您關閉模式照片查看器時,所有按下的狀態都將被刪除。他們如何做到這一點? – vsync

相關問題