You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

window.location.href 何时更新?history.go(-1)执行后的URL疑问

关于history.back()/history.go(-1)与window.location.href更新时机的解析

我来帮你把这个问题的核心细节理清楚:

1. 执行history.go(-1)瞬间的location.href状态

刚调用window.history.go(-1)的时候,浏览器只是触发了回退的异步请求,此时window.location.href仍然会指向当前页面的URL。这也是你用console.log(window.location.href)立刻输出会得到当前页面地址的原因——同步代码的执行优先级高于浏览器的跳转处理。

2. window.location.href的具体更新时机

window.location.href的更新发生在浏览器开始处理回退跳转的早期阶段,不需要等到上一页完全加载完成。但这个更新是异步的,会在你的同步代码(包括调用history.go(-1)的整个函数)执行完毕之后才会触发。

举个直观的例子:

console.log(window.location.href); // 输出当前页面URL
window.history.go(-1);
console.log(window.location.href); // 仍然输出当前页面URL,因为同步代码还没跑完

只有当同步代码全部执行完,浏览器开始处理跳转流程时,href才会被更新为上一页的URL。

3. 你引用的Stack Overflow代码逻辑解析

那段代码的设计完全利用了这种异步特性:

  • 先记录当前页面的URL到prevPage变量
  • 调用history.go(-1)发起回退请求
  • 用setTimeout延迟500ms检查window.location.href:
    • 如果href和prevPage一致,说明回退失败(比如历史栈中没有上一页),就跳转到指定的fallback URL
    • 如果href已经变化,说明回退成功,不需要额外操作

之所以用setTimeout,就是为了给浏览器留出足够的异步处理时间,确保能准确判断回退是否生效。

内容的提问来源于stack exchange,提问作者techriften

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:24:22