源起
学习webpack使用的时候,写简单SPA应用时需要通过pushState API变更历史URL,并加载页面
是什么?
访问历史记录
|
|
有什么用?
界面上的所有JS操作不会被浏览器记住,就无法回到之前的状态,在HTML5可以通过window.history操作访问历史状态,让一个页面可以有多个历史。
为什么会有?
假设一个学生管理系统的记录的页面,然后我们需要把这个页面学生违纪的内容发送给他人,但是如果仅仅只是一个tab栏切换,我们发送URL地址就会有一个尴尬的现象,就是发过去的又是初始化的页面(也就可以理解为:无状态),因为URL地址至始至终没有发生变化过。
简单来说就是动态加载出来的内容我们无法给别人分享链接。这种对状态的需求在应用开发中尤为迫切!!!
因为AJAX的兴起,前端走向了web应用的时代,利用AJAX动态加载实现内容替换。但是弊端是利用AJAX实现无刷新改变的文档内容,是不会修改URL的,但是这里有人要问为什么一定要修改URL呢?因为一个URL代表一个特定的网络资源,AJAX修改了页面的内容,所以用不同的URL去标识他们,这个是非常有必要的。
这种状态思想特别是在现在web开发(web应用)中是非常重要的。
以前的history有什么?
之前我们可以通过history对象实现前进,后退,和刷新之类的操作
|
|
demo1—基本用法和效果
|
|
对pushState的误解
一开始误认为pushState会直接向地址栏加入我们通过调用pushState()添加的状态,而pushState()其实是改变了当前状态,把当前状态前一个状态添加到历史记录。
源自张鑫旭老师的historyAPI demo
配合ajax技术实现的PJAX技术
|
|
使用pushState实现有状态的tab栏切换
|
|
此例子最大的效果在于:保存了状态,当把URL发送给别人的时候,得到的是一个带有状态的视图,而不是初始化页面。
参考: