我有一个主干应用程序,我想在其中打开一个覆盖层,它只是一个带有其 url 的页面。您还可以使用不同的页面/网址在此叠加层中导航。因此,当覆盖层关闭时,我想将哈希设置回覆盖层打开之前的状态。由于覆盖是通过链接打开的,因此我无法从之前的状态中获取哈希值。
那么有没有办法在哈希更改时获取以前的哈希?
我有一个主干应用程序,我想在其中打开一个覆盖层,它只是一个带有其 url 的页面。您还可以使用不同的页面/网址在此叠加层中导航。因此,当覆盖层关闭时,我想将哈希设置回覆盖层打开之前的状态。由于覆盖是通过链接打开的,因此我无法从之前的状态中获取哈希值。
那么有没有办法在哈希更改时获取以前的哈希?
hashchange 事件有一个“oldURL”字段......存储所有“oldURL”(或仅最后一个),并在需要时使用最后一个 url 更改实际 url。
来源:https ://developer.mozilla.org/en/DOM/window.onhashchange
我想出了这个小技巧。当覆盖打开时,我存储window.history.length
. 当覆盖关闭时,我调用window.history.go
存储长度与实际长度之间的差异并减去 1。
var appStateActions = {
overlayPre: function(){
this.historyPosition = window.history.length;
},
overlayExit: function(){
window.history.go(this.historyPosition - window.history.length -1);
}
}
不幸的是,由于历史的限制,这不起作用。因此,在达到历史长度限制后,您会得到错误的结果。
var historyurl =[];
$(window).on('hashchange', function(e){
historyurl.push(location.hash);
if(historyurl.length > 2){
historyurl.splice(0,historyurl.length-2)
};
});
console.log("Last Hah Url ="+historyurl[0])