1.之前接了一个需求。就是H5的微信授权。当微信要授权拿到code 的时候需要跳转一个URL。但是跳转URL的话,页面会进行一个刷新,从而导致页面的不美观。那么有什么办法可以让地址URL改变的同时,然后也不刷新页面呢?
解决方法:
1、history.pushState():新增历史记录
2、history.replaceState():替换当前历史记录
3、window.location.hash: 基于 Hash 的 URL 变更 (更兼容老的浏览器)
1、history.pushState():新增历史记录
`pushState` 能够在不刷新页面的情况下,向浏览器历史记录中添加一条新记录,并更新 URL。注意:这个方法是可以使用户可以使用浏览器的“前进”和“后退”按钮进行导航。
特点:
URL 变化,但页面不会刷新。
不会新增历史记录,用户点击“后退”不会回到之前的 URL。
适用于临时性 URL 变更,如动态筛选、修正错误 URL。
代码示例:history.pushState({}, '', '/path')
第一个参数必须显式传递状态对象(可为`null`或空对象),无默认值
第二个参数必选但可忽略,函数定义中要求传递该参数,但现代浏览器忽略其值(可用`document.title`或空字符串占位)
第三个参数则是需要跳转的路径
2、history.replaceState():替换当前历史记录
与 `pushState()` 类似,但 `replaceState()` 是替换当前的历史记录,而不会创建新的记录。
特点:
URL 变化,但页面不会刷新。
不会新增历史记录,用户点击“后退”不会回到之前的 URL。
适用于临时性 URL 变更,如动态筛选、修正错误 URL。
代码示例:history.replaceState({}, '' , '/another-url');
第一个参数必须显式传递状态对象(可为`null`或空对象),无默认值
第二个参数必选但可忽略,函数定义中要求传递该参数,但现代浏览器忽略其值(可用`document.title`或空字符串占位)
第三个参数则是需要跳转的路径
3、window.location.hash: 基于 Hash 的 URL 变更
是用于修改当前页面 URL 的哈希部分(即 `#` 后面的内容)
代码示例:window.location.hash(' ')
特点:
URL 变化但页面不刷新。
`hashchange` 事件可用于监听 URL 变化。
适用于简单的前端路由,但不能修改 `?` 前面的路径。