历史状态管理是现代Web开发的一个难点。尤其是在SPA应用的开发中,无刷新的前端体验同时毁掉了浏览器的前进后退按钮。
要解决这个问题,我们有两个方法。
第一就是浏览器的hashchange事件,这个方法也是我们在单页应用开发中通常会选用的路由管理机制。
第二就是HTML5中通过更新history对象,为我们提供的新的管理历史状态的API。
1.history.pushState()和history.replaceState()方法
pushState()有三个参数:一个状态对象、一个标题(现在会被忽略),一个可选的URL地址。
- 状态对象(state object) : 一个JavaScript对象,与用pushState()方法创建的新历史记录条目关联。无论何时用户导航到新创建的状态,popstate事件都会被触发,并且事件对象的state属性都包含历史记录条目的状态对象的拷贝。
任何可序列化的对象都可以被当做状态对象。因为FireFox浏览器会把状态对象保存到用户的硬盘,这样它们就能在用户重启浏览器之后被还原,我们强行限制状态对象的大小为640k。如果你向pushState()方法传递了一个超过该限额的状态对象,该方法会抛出异常。如果你需要存储很大的数据,建议使用sessionStorage或localStorage。 - 标题(title) : FireFox浏览器目前会忽略该参数,虽然以后可能会用上。考虑到未来可能会对该方法进行修改,传一个空字符串会比较安全。或者,你也可以传入一个简短的标题,