我目前正在使用javascript搞乱浏览器历史记录,而且我几乎拥有我想要的东西 但我遇到一个巨大的错误,让我解释一下情况:
我有一个菜单,当按下菜单项时,会执行以下代码:
$("#content").load("http://example.com/menuitem");
window.history.pushState({ page:"http://example.com/menuitem" },"", "http://example.com/menuitem");
document.title = 'Menu item';
我还有一个空onbeforeunload
函数,因此浏览器的后退,前进和历史记录选项按预期工作。而且我有一个onpopstate函数,但我没有看到他做任何事情,所以不知道我是否真的需要他。
window.onbeforeunload = function(){
};
window.onpopstate = function(e){
console.log('onpopstate was called');
if(e.state){
window.location.href = e.state.page;
}
};
现在,我的错误很大: 我正在测试如下:
当我回去的时候,我第一次按照预期登上了example.com/menuitem,但是当第二次回到时,我再次登上完全相同的页面,而不是登上example.com,这是我想要的是。从这一刻起,当我查看历史时,我的“example.com/menuitem”页面似乎因某种原因而重复。
这里出了什么问题以及如何解决我的错误?
答案 0 :(得分:0)
我解决了我的问题,我需要在.replaceState()
之前的当前页面(example.com)上添加.pushState()
。
并将window.onpopstate
函数移动到被调用的页面(example.com/menuitem)。
window.history.replaceState({ page:"http://example.com/" },"", "example.com");
我通过尝试和错误得到了这个答案。我希望这会有所帮助。