window.onpopstate事件状态null在第二个后退按钮上

时间:2016-03-22 13:20:36

标签: javascript html5 dom browser-history html5-history

我用它来更改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的内容?

0 个答案:

没有答案