学习课程名称:直面JavaScript中的30个疑难杂症
章节名称:JS BOM
讲师姓名:公明2020
课程内容:
开发中使用history和location需要注意什么
History 作为一个全局变量(即 window.history),不继承任何属性,在 html4 时代就已经存在,通过这个接口,我们可以操纵浏览器中曾经访问过的会话历史记录,但当时我们能使用的属性与方法只有这么几个:
History.length 属性: 返回一个整数,该整数表示会话历史中元素的数目,包括当前加载的页。例如,在一个新的选项卡加载的一个页面中,这个属性返回1。
History.back() 方法:前往上一页, 用户可点击浏览器左上角的返回按钮模拟此方法。等价于 history.go(-1).
History.forward() 方法:在浏览器历史记录里前往下一页,用户可点击浏览器左上角的前进按钮模拟此方法。等价于 history.go(1).
History.go() 方法:通过当前页面的相对位置从浏览器历史记录( 会话记录 )加载页面。比如:参数为-1的时候为上一页,参数为1的时候为下一页. 当整数参数超出界限时,那么这个方法没有任何效果也不会报错。调用没有参数的 go() 方法或者不是整数的参数时也没有效果。
从 html5 开始,增加了两个新的方法:
History.pushState(state, title [, url]) 方法:往历史堆栈的顶部添加一个状态。pushState() 带有三个参数:一个状态对象,一个标题(现在被忽略了),以及一个可选的URL地址。state为一个对象或null,它会在触发window的popstate事件(window.onpopstate)时,作为参数的state属性传递过去;如果你像pushState() 方法传递了一个序列化表示大于640k 的state对象,这个方法将扔出一个异常。如果你需要更多的空间,推荐使用sessionStorage或者localStorage。title为页面的标题,但当前所有浏览器都忽略这个参数。URL为页面的URL,不写则为当前页;新URL必须和当前URL在同一个源下;否则,pushState() 将丢出异常。
History.replaceState(state, title [, url]):更改当前页面的历史记录值。参数同上。这种更改并不会去访问该URL。
window.location和document.location互相等价的,可以交换使用。且 location 的8个属性都是可读写的,但是只有href与hash的写才有意义。例如改变location.href会重新定位到一个URL,而修改location.hash会跳到当前页面中的anchor名字的标记(如果有),而且页面不会被重新加载。
通过 location 我们可以作如下几种方法的操作:
assign() 方法:加载新的文档;
reload() 方法:重新加载当前文档;
replace() 方法:用新的文档替换当前文档。