在 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()
)。