location.href历史记录问题

a页面初始化的时候 location.href = ‘b页面’
这种情况下浏览器是没有a这条历史记录的
如果 在a页面 延迟调用location.href = ‘b页面’ 就有a的历史记录

阅读 11.4k
2 个回答

正常情况下,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 次才能退出。

history.pushState(history.pushState(null, null, '/a')

然后

location.href = 'b页面'

跳转

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题