我用它来更改URL并推送到历史堆栈:
history.pushState({ }, null, url);
有效。然后,我在pop上实现重载:
window.onpopstate = function (e) {
if (e && e.state) {
location.reload();
}
}
它适用于第一个后退按钮并重新加载页面。但是,当它重新加载页面时,推送状态历史似乎已经消失。当我再次尝试返回时,它失败,因为e.state
为空。在没有解决方案的情况下window.history.state becoming null, what all could be possible cases making it null or changing its state on browser back?似乎存在类似的问题(虽然我不确定它是否相同)。
有人可能会问“为什么不重新加载每个pop,没有if语句?”。这是不可能的,因为onpopstate
也在我的AJAX调用,弹出窗口等在页面上的许多地方调用,同时e.state
为空,我不应该在这种情况下重新加载。那就是我在推动时推出一个额外的空物体。
作为另一种方法,我尝试将整个文档(document.documentElement.innerHTML
)作为变量传递到状态,然后检查该变量并从中恢复(如果存在),但它也会弄乱我的整个DOM所以我放弃了它。
如何使后退和前进按钮工作,而不会破坏任何同时调用onpopstate
的内容?