2013-04-04 81 views
5

我寫的代碼創建一個類似於如何照片從時間軸看Facebook上的UX ......HTML5歷史API:刷新和後退發出

  1. 觀察時間軸,你點擊照片並它在一個模式
  2. 刷新打開,它關係到一個專門的頁面圖像
  3. 你打回來,你返回到時間軸

我有大部分的這種通過HTML5組織胺工作ory API。這裏是點擊圖像時我在做什麼...

  1. 我用preventDefault()避免鏈接(在圖像頁)以下的,而是AJAX加載模式與圖像
  2. pushState的URI所以它出現在地址欄
  3. 現在我刷新,我被帶到專用圖像頁面(步驟#2的URI)
  4. 然後我點擊「後退」按鈕,它顯示地址欄中的上一頁URI(即時間軸),但我仍然在圖像頁面上。

問題:在步驟#4,有沒有辦法繞過歷史API,只是讓瀏覽器執行標準的「返回」行動,所以我可以返回到前一個頁面(即時間軸)?

+0

也許pushState的加載模態過嗎? – gengkev 2013-04-04 07:17:29

+0

我想你應該這樣做的方式是聽onpopstate – gengkev 2013-04-04 07:18:39

+0

我實際上是激活'preventDefault()'然後'pushState'然後Ajax調用。如果我在Ajax之前或成功回調中觸發'pushState',則會出現同樣的問題。 – wdm 2013-04-04 07:21:59

回答

0

你有沒有嘗試過一個很好的醇'history.go(-1);

+1

我正在讀取'History.getState()'數據,以檢測是否存在模態數據,如果是,則使用'History.go(-1)',但它將我返回到所需頁面之前的頁面。 – wdm 2013-04-04 07:26:03

+0

@wdm - 你一定是指'history.state' – vsync 2015-02-15 15:27:59

0

我不喜歡這樣寫道:

第1步 - 保存初始頁面URL(這又是不變)

var savedPageStateURL = window.location.pathname; 

第2步 - 替換當前的歷史狀態(推,只替換)

window.history.replaceState({}, null , url); 

第3步 - 還原歷史的變化,並返回到第一步的狀態

if('pushState' in window.history && window.history.state) 
    window.history.replaceState({}, null , savedPageStateURL);