2014-11-25 144 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