2013-10-18 268 views
1

在测试场景中,我有两个页面pageA和pageB。pushState加扰浏览器历史记录

在第一步中,一个按钮触发window.history.pushState调用,并在pageB的地址栏中显示地址。

在第二步中,浏览器的地址栏用于请求pageB。浏览器呈现pageB的内容。显示pageB的地址栏地址。

在最后一步中,浏览器的后退按钮用于返回pageA。在地址栏中pageA的地址显示为。然而,浏览器显示页面B的内容,我期待看到pageA的内容。

我知道我做错了什么。即使我不知道如何描述这种行为。你有什么建议吗?

在这里,您可以在演示的jsfiddle发现:http://jsfiddle.net/HqECT/3/show/

您可能会看到执行:http://jsfiddle.net/HqECT/3/

注:测试是在Chrome v30.0.1599.101

+1

如果您正在某个特定的浏览器上进行测试,那么确实指出您正在使用的浏览器可能会很好。 –

+1

您的意思是'window.history.pushState' :-) –

+0

当您遍历通过'pushState'添加的历史元素时,浏览器不加载页面。你需要使用'window.onpopstate'事件来做到这一点。 –

回答

2

你要听的运行popstate event。当您调用pushState时,事件对象将包含一个state属性,其中包含您放入历史记录中的任何数据。如果您在其中放入正确的数据,则可以使用该数据将页面恢复到旧URL的状态。

+0

谢谢@Quentin。由于在第二步中发出的是http请求而不是'pushState',因此在第三步中,state属性始终为'null'。 – kokeksibir

+0

@kokeksibir:除非您已将状态对象(第一个参数)传递给'pushState',否则'state'属性将为'null'。 –

+0

@RocketHazmat nope,即使我在第一步设置状态,它不起作用。看到更新的问题,我已经在jsFiddle中添加了演示。 – kokeksibir