同域名、同项目、仅 hash 变化,window
2026/7/2 3:16:33 网站建设 项目流程
什么是Hash?

URL中#后面的部分叫hash :

为什么不执行window.location.href?

浏览器对hash变化处理方式:

1

❌ hash 变化 ≠ 页面跳转

变异类型

浏览器行为

hash变化(#/payMethod#/bindCard

不刷新页面,只是触发hashchange事件

pathname变化(/payMethod/bindCard

革新版面

你的情况

1

2

3

4

5

6

// 当前 URL

window.location.href ='https://xxx.com/cash-center/#/payMethod?params=abc'

// 目标 URL(只有 hash 不同)

window.location.href ='https://xxx.com/cash-center/#/bindCard?params=12345'

// ^^^^^^^ hash 变了

浏览器只是hash变更了,会更新页面,SPA应用内部通过监听hashchange来切换路径。

解决方案

方案1 :强制刷新

1

2

window.location.href = targetUrl

window.location.reload()// 强制刷新

方案2 :使用Vue Router (推荐)

1

2

3

4

this.$router.push({

path:'/bindCard',

query: {params:'12345'}

})

方案3 :货币pathname (是非散列)

1

2

3

// 构造新 URL 时,换掉 hash 部分

consturl = window.location.href.replace('#/payMethod','#/bindCard')

window.location.href = url

一句话总结

hash变化≠页面跳跃,浏览器只把它当作同一页面的"锚点"变化,不会重新加载。 SPA用靥监听hashchange来处理路由,而非靥页面刷新。

如今的两个地址

1

https://xxx.com/cash-center/#/payMethodhttps://xxx.com/cash-center/#/bindCard

在浏览器眼里,寃们是同一个网址!

因为浏览机器:

  • #后面的东西=页面内部的标记
  • 预算新页面
  • 所以你用window.location.href改后面的内容
  • 浏览器获动,不跳不跳,不刷新

就像:

1

2

一本书 = 网址

书里的页码 = #后面的内容

你只是翻页,没换书,浏览器掌握:

重新加载,我不跳!

再简化到极致

#前面一个=同一个页面

改#后面=只是翻页,不是跳

因为:

window.location.href不生败类!

你现在必须用的唯一方案(支持回复)

1

this.$router.push('/bindCard')

或者

1

window.location.hash ='/bindCard'

解决方案

1、用window.location.hash跳墙

1

2

3

4

5

// 拼接新的 hash 路由

constnewHash ='#/bindCard?params=12345';

// 直接修改 hash → 自动跳转,自动保留历史记录(可返回)

window.location.hash = newHash;

2、用 window.location.href(加时间户强制跳跃),已惊人证过是行不通的

1

2

3

4

5

6

constbaseUrl ='https://xxx.com/cash-center/';consttargetHash ='#/bindCard?params=12345';

// 加时间戳,让浏览器认为是新链接,强制跳转

constfullUrl = baseUrl + targetHash +'&_t='+ Date.now();

window.location.href = fullUrl;

该名称,同项目,hash经由,window.location.href完全失败,加时间户也没有使用,因此浏览机器认为hash变化不算真正的页面。

注意:禁止回复,禁止回复

1

2

3

4

5

6

7

window.location.replace(url)// ❌ 禁用这个!会清除历史记录,无法返回

window.location.hash = xxx ✅ 可返回

window.location.href = xxx ✅ 可返回

this.$router.push(xxx) ✅ 可返回

最终最简,最简,你直接用的代码

1

window.location.hash ='/bindCard?params=12345';

3、创建抓阄模拟点破(浏览器无法拔取、强制跳动),已惊证方法也不行

1

2

3

4

5

6

7

8

9

// 目标地址

consturl ="https://xxx.com/cash-center/#/bindCard?params=12345";

// 创建 a 标签

consta = document.createElement("a");

a.href = url;

a.target ="_self";// 在当前页面打开 → 可以返回上一页

document.body.appendChild(a);

a.click();// 模拟点击

document.body.removeChild(a);

方法1 :强制修改location (最推荐,最简单单位)

1

window.location.href = window.location.origin + window.location.pathname +'#/bindCard?params=12345'

方法2 :先清空hash再赋侧(强制触发跳跃)

1

2

3

4

window.location.hash =''

setTimeout(() => {

window.location.hash ='/bindCard?params=12345'

}, 10)

方法3:history.pushState +刷新hash(Vue同项目专用)

1

2

history.pushState({},'','/cash-center/#/bindCard?params=12345')

window.dispatchEvent(newHashChangeEvent('hashchange'))

方法4:location.assign跳羚(支持回复)

1

consturl ="https://xxx.com/cash-center/#/bindCard?params=12345"window.location.assign(url)

方法5:iframe跳水(终极温暖,任何环境都能跳)

1

2

3

4

5

6

7

8

9

consturl ="https://xxx.com/cash-center/#/bindCard?params=12345"

constiframe = document.createElement('iframe')

iframe.style.display ='none'

iframe.src = url

document.body.appendChild(iframe)

setTimeout(() => {

document.body.removeChild(iframe)

}, 50)

你现在直接复制次数( 100%必跳)

1

2

3

4

5

// 终极万能跳转(任何失效都能用)

window.location.hash =''

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询