学习笔记:location.hash和history.pushState() (2)

·state会成为history.pushState()添加的历史实体的属性,可以用history.state获得。传入state的参数要能字符串化,比如能用JSON字符串化,因为火狐浏览器会把state这个对象存在用户的磁盘,以便当用户重启浏览器时state这个对象能恢复实际伤并不能恢复。state这个对象字符串化后的大小有限制(火狐是640K),如果需要更多的空间,你应该使用sessionStorage 和/或localStorage。

·第二个参数传入空的字符串即可。

·传入的URL可以是相对的也可以是绝对的。如果是相对的,它将相对于当前的URL被解析。传入的URL必须和当前的URL同源。如果不传入URL,则会被设置为当前的URL。

总之,调用pushState()和设置window.location = "#foo"(设置hash,与window.location.hash = "#foo"等效,且window.可省略)很像,两者都创建了并激活了一个新的历史实体。但是前者由以下优点:

1.         新的URL可以是任何和当前URL同源的URL,而设置window.location让你智能呆在同一个文档里,因为你只改变了hash。

2.         你可以不改变URL而创建新的历史实体,而通过设置window.location = "#foo";创建一个新的历史实体则必须要求当前的hash不是#foo。

3.         你可以在state中放入任何数据,而用hash就只能在URL末尾放入短字符串形式的数据。

history.replaceState()和history.pushState()很像,除了是改变当前的历史实体而不是创建一个新的。当你像更新当前的历史实体的state对象或URL来响应用户的行为时,replaceState()相当有用。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zggjwf.html