a页面初始化的时候 location.href = ‘b页面’
这种情况下浏览器是没有a这条历史记录的
如果 在a页面 延迟调用location.href = ‘b页面’ 就有a的历史记录
a页面初始化的时候 location.href = ‘b页面’
这种情况下浏览器是没有a这条历史记录的
如果 在a页面 延迟调用location.href = ‘b页面’ 就有a的历史记录
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答867 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
正常情况下,
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 次才能退出。