在 JavaScript 中,使用window.location.href 跳转页面,如果当前 URL 和目标 URL 完全相同

6 阅读2分钟

在 JavaScript 中,如果当前 URL 和目标 URL 完全相同(包括 # 后面的 hash 部分),直接使用 window.location.href 跳转时,浏览器不会触发页面刷新或路由变化(因为 URL 没有变化)。

解决方案

1. 强制刷新当前页面(最简单)

如果只是希望 重新加载当前页面,可以使用 location.reload()

window.location.reload(); // 普通刷新(可能使用缓存)
window.location.reload(true); // 强制从服务器刷新(绕过缓存)

2. 修改 Hash 后跳转(适用于 SPA 前端路由)

如果是 单页应用(SPA)(如 Vue Router / React Router),浏览器不会因为 # 后面的变化而刷新页面,但前端路由会监听到 hashchange 事件。
可以 先改成一个临时 hash,再改回来,以触发路由跳转:

// 临时修改 hash,再改回原 URL
window.location.hash = '/temp';  // 先改成一个不存在的 hash
setTimeout(() => {
  window.location.hash = '/index';  // 再改回目标 hash
}, 0);

适用场景:Vue Router / React Router 等前端路由框架。

3. 添加随机参数(适用于普通页面跳转)

在 URL 后面加一个随机参数(如时间戳),让浏览器认为这是一个新 URL:

window.location.href = url + '?t=' + Date.now();

适用场景:普通页面跳转,确保浏览器重新加载。

4. 使用 location.replace() 替换当前 URL

replace() 不会产生历史记录,但可以强制更新 URL:

window.location.replace(url);

适用场景:不希望产生历史记录,但仍需更新 URL。

总结

方法

适用场景

是否刷新页面

是否影响历史记录

location.reload()

强制刷新当前页

✅ 是

❌ 不影响

修改 hash

SPA 前端路由跳转

❌ 否(但触发路由)

✅ 新增历史记录

添加随机参数

普通页面跳转

✅ 是

✅ 新增历史记录

location.replace()

替换当前 URL

✅ 是

❌ 不新增历史记录

推荐方案

  • 如果是 SPA(Vue/React 等),使用方法 2(修改 hash)。

  • 如果是普通页面,使用方法 1(reload())或方法 3(加随机参数)。

  • 如果不想新增历史记录,使用方法 4(replace())。