2014-11-25 97 views
0

電流(先前)URL狀態所以我們可以說我有一個Web應用程序在我怎樣才能得到statechange

localhost:8080/myapp?home

如果我改變目前的狀態狀態1,我要救在(前)狀態在本地存儲中,這樣的

$.totalStorage("prevState", window.location.search.substr(1));

但是這條線應該在哪裏執行?我也在使用history.js庫。但是狀態改變後我只能得到URL狀態。

History.Adapter.bind(window, "statechange", function() { 
    var page = window.location.search.substr(1); //page === "home" 
}); 

我也是用這個功能

goTo : function(page) { 
    var page = window.location.search.substr(1); //page === "state1", but not with back, forward, backspace buttons 
    History.pushState({page: page}, getPageTitle(page), "?" + page); 
} 

但是,當我改變URL狀態,此函數調用此不僅節省了以前的狀態。 我怎樣才能做到全球範圍內,通過按例如瀏覽器後退和前進按鈕和退格或鼠標前後按鈕。

回答

2

爲什麼不創建一個歷史堆棧並將當前狀態添加到它?這讓你有機會回到比一個國家更遠的地方。例如:

$(window).on("statechange", function() { 
    var historyStack = localStorage.getItem("stateHistory") === null ? [] : JSON.parse(localStorage.getItem("stateHistory")); 
    historyStack.push(window.location.search.substr(1)); 
    localStorage.setItem("stateHistory", JSON.stringify(historyStack)); 
}); 

要導航回你取的歷史堆棧第二最後一個條目,並隨後將狀態改變之前從歷史堆棧中的最後兩個條目(!)。

+0

我解決了這個問題後,我創建了這個問題,但在你的答案之前:(我解決它有點不同,但你的想法是有點相同,所以我給你正確答案的賞金。 ! – walts 2014-12-11 11:46:04

+0

Thx,與應用程序的好運! – ODaniel 2014-12-11 15:18:54

0

我不確定這是否是正確的答案,但我想我會嘗試附加一個函數來「beforeunload」事件,然後使用window.location來獲取URL。一旦你有了,把它存儲在localStorage上一定很容易。

window.onbeforeunload=function(e){ 
    window.location.href.toString().split(window.location.host)[1] 
} 

我不知道你確切的用例。

+0

window.onbeforeunload不起作用:( – walts 2014-11-25 13:51:52

+0

這是一個標準事件,爲什麼它不起作用? – 2014-11-25 13:57:46

+0

如果我刷新頁面或從瀏覽器URL輸入字段更改URL,但它不適用於history.js和瀏覽器按鈕 – walts 2014-11-25 14:10:25