a页面初始化的时候 location.href = ‘b页面’这种情况下浏览器是没有a这条历史记录的如果 在a页面 延迟调用location.href = ‘b页面’ 就有a的历史记录
1 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
正常情况下,location.href
会生成一条新的历史记录,location.replace
会替换当前历史记录。但 location.href
并不必然导致一条新的历史记录的产生,在当前页面的 onload
事件发起之前,location.href
也是替换当前历史记录,浏览器的实现可以参见 NavigationScheduler::MustReplaceCurrentItem。
如果你希望确保 location.href
生成一条新的历史记录,建议监听 onload
事件并起定时器执行 location.href
,应该与你当前实现的做法类似。想要更早跳转的话就只能按照 @orangexc 的做法,先 pushState
再跳转,跳转建议用 location.replace
。
我不太清楚你这样做的需求是什么,如果 a 页面只是作为跳转页的话,不应该保存历史记录才对,而且过早跳转又保存 a 的历史记录的话,a 页面其实是不完整的,在有前进后退缓存的浏览器上会造成后退 a 页面白屏等问题,在无前进后退缓存的浏览器上会陷入 b 页面后退 a 页面又调回 b 页面的死循环,必须连续快速后退 2 次才能退出。
添加回答
举报
0/150
提交
取消