如何操纵浏览器历史记录并捕获浏览器 back/forward 按钮?

How to manipulate browser history and catch browser back/forward buttons?

我已经搜索了几个小时,试图进行简单的浏览器历史记录操作。

我有几个菜单 link,我将点击处理程序绑定到它们。链接的 href 只是散列:href="#Home"href="#About".

我想在用户单击 link 时显示子页面,无需重新加载页面并更改浏览器 url。

我也用 pushState() 尝试过这个基本示例,但它不起作用: http://jsbin.com/wecubizovu/1/edit?html,js,console

http://jsbin.com/wecubizovu

当我在 Chrome 中 运行 时,我希望如果用户单击 link,他将在 url 和 popstate 不会改变。为什么会触发 popstate?我怎样才能做到当用户点击 link 时,我将哈希附加到浏览器 url 并且当用户点击浏览器后退按钮时,我捕捉到该事件并显示我想要的页面?

谢谢!

您的 a 元素有一个 href'',如果您不阻止默认操作,它仍然会执行,这会以某种方式弄乱您想要做的事情。 将您的函数更改为

$("#asd").click(function(e) {
  e.preventDefault();
  alert("jo");
  window.history.pushState("", document.title, "#asd");
});

实现您正在寻找的东西。

编辑:链接:http://jsbin.com/sosozeteti

http://jsbin.com/sosozeteti/1/edit?html,js