猿问

location.href历史记录问题

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

哔哔one
浏览 2146回答 1
1回答

犯罪嫌疑人X

正常情况下,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 次才能退出。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答