window.history相关

2,773 阅读2分钟

pushState

HTML5 API新标准中,history中pushState方法主要用于向浏览器历史添加一个状态。

语法实例:

let state = {page:1};
let title = 'page 1';
let url = '/a.html';

histroy.pushState(state,title,url)

state 【object】

MDN解释:状态对象是一个由 pushState()方法创建的、与历史纪录相关的JS对象。当用户定向到一个新的状态时,会触发popstate事件。事件的state属性包含了历史纪录的state对象。

而简单一点说就是需要从源页面传入新页面的对象数据,当跳转到新页面后可以通过history.state获取到该值。小编简单理解为可以用来页面之间的数据传递,其他用处还没发现。哈哈哈。勿喷!

title【string | 可选】

如果没有值可直接传空,【推荐不传入任何值】

url【string】

跳转的目标地址

replaceState

replaceState和pushState都是HTLM5中history的新特性。replaceState的语法和pushState语法完全相同。

pushState和replaceState的区别

观察下面的例子

window.history.pushState({page:1},'','/?name=1');

window.history.pushState({page:2},'','/?name=2');

windoe.history.replaceState({page:3},'','/?name=3');

window.history.back();
//此处返回到的是 http://xxxx.com/?name=1 的页面,为什么呢?
//因为replaceState是改变history的状态信息,而不是为history新增一个状态信息

window.history.go(1);
window.history.go(2);
//再执行上面两种形式的代码,返回的结果都是一样的额,?name=3
//现在不管用什么方式都回不到?name=2的路径中去,因为replaceState已经把它替换了,

pushState和replaceState的共同点都是:携带state数据实现无刷新页面跳转。

back()

history中的back()方法,主要用于回退;

forward()

history中的forward()主要用于前进一页。forward()等于go(1);

go()

history.go(n)根据n的值来浏览器来处理前进几页还是后退几页,当n=0时,此时是刷新页面

location.assign()方法和location.replace()方法的区别

window.location.assign(url) : 加载URL 指定的新的 HTML 文档。就相当于一个链接,跳转到指定的url,当前页面会转为新页面内容,可以点击后退返回上一个页面。

window.location.replace(url) : 通过加载 URL 指定的文档来替换当前文档 ,这个方法是替换当前窗口页面,前后两个页面共用一个 窗口,所以是没有后退返回上一页的,