2013-04-04 79 views
5

我写的代码创建一个类似于如何照片从时间轴看Facebook上的UX ......HTML5历史API:刷新和后退发出

  1. 观察时间轴,你点击照片并它在一个模式
  2. 刷新打开,它关系到一个专门的页面图像
  3. 你打回来,你返回到时间轴

我有大部分的这种通过HTML5组织胺工作ory API。这里是点击图像时我在做什么...

  1. 我用preventDefault()避免链接(在图像页)以下的,而是AJAX加载模式与图像
  2. pushState的URI所以它出现在地址栏
  3. 现在我刷新,我被带到专用图像页面(步骤#2的URI)
  4. 然后我点击“后退”按钮,它显示地址栏中的上一页URI(即时间轴),但我仍然在图像页面上。

问题:在步骤#4,有没有办法绕过历史API,只是让浏览器执行标准的“返回”行动,所以我可以返回到前一个页面(即时间轴)?

+0

也许pushState的加载模态过吗? – gengkev 2013-04-04 07:17:29

+0

我想你应该这样做的方式是听onpopstate – gengkev 2013-04-04 07:18:39

+0

我实际上是激活'preventDefault()'然后'pushState'然后Ajax调用。如果我在Ajax之前或成功回调中触发'pushState',则会出现同样的问题。 – wdm 2013-04-04 07:21:59

回答

0

你有没有尝试过一个很好的醇'history.go(-1);

+1

我正在读取'History.getState()'数据,以检测是否存在模态数据,如果是,则使用'History.go(-1)',但它将我返回到所需页面之前的页面。 – wdm 2013-04-04 07:26:03

+0

@wdm - 你一定是指'history.state' – vsync 2015-02-15 15:27:59

0

我不喜欢这样写道:

第1步 - 保存初始页面URL(这又是不变)

var savedPageStateURL = window.location.pathname; 

第2步 - 替换当前的历史状态(推,只替换)

window.history.replaceState({}, null , url); 

第3步 - 还原历史的变化,并返回到第一步的状态

if('pushState' in window.history && window.history.state) 
    window.history.replaceState({}, null , savedPageStateURL);