我对历史功能有疑问。我遇到的问题是每当我导航到另一个页面时,历史就会被删除。这导致originalEvent.state
的值为null
,而不是州ID。
让我用一些代码解释自己:
function SetStateId(stateId, addState) {
$("#stateId").val(stateId);
data = { stateid: stateId };
if (addState)
{
console.log("History added. StateId: " + stateId);
history.pushState(data, "StateId: " + stateId, window.location);
}
else {
console.log("History replaced. StateId: " + stateId);
history.replaceState(data, "StateId: " + stateId, window.location);
}
}
function setupPopState() {
console.log("setupPopState ");
$(window).bind('popstate', function (event)
{
PopStateEvent(event);
});
}
和我的HTML看起来像这样:
的index.html
<input type="hidden" name="stateId" id="stateId" value="1">
<script>SetStateId(1, true,"");setupPopState();</script>
<a href="page2.html">Page 2</a>
page2.html
<script>
function callHistory(){
SetStateId(2, true,"");
setupPopState();
}
</script>
<input type="hidden" name="stateId" id="stateId" value="2">
<script>callHistory();</script>
每当加载索引页时,都会调用SetStateId函数,并将stateID添加到值为1的历史记录中。然后自动转到setupPopState()事件,将popstate事件绑定到窗口。查看事件的内容,我看到在这种情况下originalEvent.state
包含一个对象。
现在,当我按下超链接时,我会导航到我的page2.html。历史是用一个新的状态推动的:2。现在是棘手的部分。当我想返回并按下后退按钮时,popstate绑定中的事件得到以下数据:orginalEvent.state = null
;当页面重新加载时(在我的情况下导航到不同的页面),看起来历史记录已被删除。
有谁知道为什么?