Javascript历史记录错误:回去似乎已经破了

时间:2015-02-16 11:25:13

标签: javascript history back

我目前正在使用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;
    }
};

现在,我的错误很大: 我正在测试如下:

  • 在地址栏中输入“stackoverflow.com”
  • 在地址栏中输入“example.com”
  • 点击menuitem
  • 在地址栏中输入“google.com”
  • 返回浏览器后退按钮,直至到达stackoverflow.com

当我回去的时候,我第一次按照预期登上了example.com/menuitem,但是当第二次回到时,我再次登上完全相同的页面,而不是登上example.com,这是我想要的是。从这一刻起,当我查看历史时,我的“example.com/menuitem”页面似乎因某种原因而重复。

这里出了什么问题以及如何解决我的错误?

1 个答案:

答案 0 :(得分:0)

我解决了我的问题,我需要在.replaceState()之前的当前页面(example.com)上添加.pushState()。 并将window.onpopstate函数移动到被调用的页面(example.com/menuitem)。

window.history.replaceState({ page:"http://example.com/" },"", "example.com");

我通过尝试和错误得到了这个答案。我希望这会有所帮助。