pushState 方法将state
对象作为您传入的第一个参数null
:
pushState() 方法示例
var stateObj = { foo: "bar" };
history.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 返回到页面?如果是这样,我会尽量避免这种情况,正如这个 SO 线程中所解释的那样: 为什么 document.write 被认为是“不好的做法”?
至于保存正文的整个 HTML,这很棘手。例如,在 Firefox 中,有 640 KB 的限制。如果您的 HTML 可能超过该数量(很可能),您只需保存可用于重新创建所需内容的信息。尝试Object
使用 JavaScript/jQuery/etc 填充页面所需的信息来保存。
状态对象可以是任何可以序列化的对象。因为 Firefox 将状态对象保存到用户的磁盘,以便在用户重新启动浏览器后可以恢复它们,所以我们对状态对象的序列化表示施加了 640k 字符的大小限制。如果将序列化表示大于此的状态对象传递给 pushState(),则该方法将抛出异常。如果您需要更多空间,我们鼓励您使用 sessionStorage 和/或 localStorage。
这里有更多好的信息:
https://developer.mozilla.org/en-US/docs/Web/API/History_API