gpt4 book ai didi

javascript - js中可以获取到之前的历史状态对象吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:57:21 26 4
gpt4 key购买 nike

当我按下后退或前进按钮并触发 popstate 事件时,我能否获得前一个状态的状态对象?不是 e.state 提供的状态对象,而是我刚刚返回/转发的状态对象?

或者,我能否检测按下的是后退按钮还是前进按钮?

我需要这个,因为我有多个子系统都需要同时使用 js 历史记录,我当然可以在推送时保存所有子系统的状态,但是当我弹出时,我必须将状态恢复到所有这些都是不受欢迎的,因为它重置了我不需要的对象。例如

state 1 = {a:1, b:1, c:1}
push a = 2
state 2 = {a:2, b:1, c:1}
hit back button, popstate fires state 1 to me
restart a with 1, b with 1, c with 1 while I only need to restart a

另类幻想解决方案

....
hit back button, popstate fires state 1 to me
I also get state 2 (the one I just moved away from) through some black magic
do a differential comparison between the 2 states, find out that I only need to modify a
restart a with 1

编辑:哦,另外,澄清一下,没有简单的方法来检查页面上当前的状态 a、b 和 c(因为它比 abc 和 123 复杂一点)

最佳答案

答案是装饰pushState来记录应用程序中的当前状态。所以,像这样:

var app = {
currentState: false,
originalPushState: false,

pushState : function(state, title, href) {
app.currentState = state;
app.originalPushState.call(history, state, title, href);
},

onPopstate : function(event) {
var newState = event.state;
var oldState = app.currentState;
app.currentState = newState;

// you now have the current state and the state you came from
},

init : function() {
window.onpopstate = app.onPopstate;
app.originalPushState = history.pushState;
history.pushState = app.pushState;
}
}
app.init();

顺便说一句,popstate 非常令人困惑。当你弹出一个常规数组时,你得到的是弹出的值,而不是现在在它末尾的值,所以在语义上它有点奇怪。此外,history.state 始终包含当前状态,因此 event.state 是多余的。设计师的奇怪选择,我想说,如果某些东西 event.popped 是指向实际弹出的页面状态的指针(可能只有在与您的域相同的域中时才可用)网站)。

关于javascript - js中可以获取到之前的历史状态对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36525412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com