Javascript 从历史中弹出最后一个状态

Javascript 从历史中弹出最后一个状态,javascript,jquery,pushstate,popstate,Javascript,Jquery,Pushstate,Popstate,是否可以将最后一个状态的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()

是否可以将最后一个状态的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? 

我搜索请求以获取上一个状态的html推送到历史记录,但没有得到满意的答案。但是我有一个想法给你,为什么你不在把它推到历史之前先保存这个州的html呢?使用客户端(cookies)或服务器端(会话)变量是很有可能的,即使在历史记录中已将内容推后,也可以检索这些变量。

pushState方法将
状态
对象作为第一个参数,您在其中传递
null

pushState()方法的示例

var stateObj={foo:“bar”}

pushState(stateObj,“第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返回页面?如果是这样的话,我会尽量避免这种情况,正如本文中所解释的:

至于保存正文的整个HTML,这很棘手。例如,在Firefox中,有640千位的限制。如果您的HTML可能超过这个数量(很可能),您只需要保存可以用来重新创建所需内容的信息。尝试保存一个
对象
,其中只包含使用JavaScript/jQuery/etc填充页面所需的信息

状态对象可以是任何可以序列化的对象。因为 Firefox将状态对象保存到用户的磁盘上,以便恢复它们 在用户重新启动浏览器后,我们将大小限制为640k 状态对象的序列化表示形式上的字符。如果你 传递序列化表示形式大于的状态对象 如果将此设置为pushState(),则该方法将引发异常。如果你需要 如果空间大于此,建议您使用sessionStorage和/或 本地存储

这里有更多好信息:


“类似这样的东西”-那么它不起作用吗?这应该是一个评论,而不是一个答案。在这个阶段,我不允许对问题添加评论