2015-04-17 65 views
8

最後的狀態是有可能得到的最後狀態的HTML推到歷史堆棧,這樣的事情:流行音樂歷史

history.pushState(null, null, {html: $('body').html()}); 

改變窗口的位置:

window.location = url; 

現在從新位置:

window.addEventListener('popstate', function(event) { 
    // back to the last state - event.state.html 
} 
history.back() // That what's firing the popstate event? 
+0

「*這樣的事情*」 - 所以不工作? – Bergi

回答

0

我搜索了請求以獲取推入歷史記錄的最後一個狀態的html,但沒有得到滿意的答案。但我有一個想法,爲什麼不嘗試在推送到歷史之前保存狀態的HTML?這很有可能使用客戶端(cookies)或服務器端(會話)變量,即使在事件被推回歷史記錄之後也可以恢復。

+0

這應該是一個評論,而不是答案。 –

+0

我不允許在這個階段添加評論的問題 –

0

的pushState的方法採用state對象作爲第一個參數,你正在傳遞null其中:pushState的的

實施例()方法

變種stateObj = {FOO: 「酒吧」} ;

history.pushState(stateObj,「page 2」,「bar.html」);

對於示例:

//object goes in first argument 
history.pushState({ html: $('body').html() }, "Title of Page", "Url to update address bar"); 

//On PopState, you have access to event.state 
window.addEventListener('popstate', function(event) { 
    var priorStateObj = event.state; 
    console.log(priorStateObj.html); 
} 

我關心的是,你似乎然後想可能document.write()該HTML返回頁面?如果是這樣,我會盡量避免這種情況,正如在這個線程中解釋的那樣:Why is document.write considered a "bad practice"?

至於保存整個身體的HTML,這是棘手的。例如,在Firefox中,限制爲640千比特。如果你的HTML可能超過這個數量(可能),你只需要保存你可以用來重新創建你需要的信息。嘗試保存一個Object只需要您使用JavaScript/jQuery /等填充頁面的信息。

狀態對象可以是任何可以序列化的對象。由於 Firefox在用戶重新啓動瀏覽器後將狀態對象保存到用戶的磁盤上,因此它們可以恢復爲 ,因此我們在狀態對象的序列化表示上施加大小限制爲640k 字符。如果 傳遞了一個狀態對象,該對象的序列化表示大於 this this pushState(),則該方法將引發異常。如果您需要更多空間,請提供localStorage。

很多更多的好信息在這裏:

https://developer.mozilla.org/en-US/docs/Web/API/History_API