起因最近做的一个图片浏览功能,请自行脑补手机图库、微博查看图片等场景。功能做好之后,马上有同学反应:进入图片浏览层时,如果用户触摸手机后退按钮,整个页面都会返回,能否在触摸返回时只关闭浏览层?一般移动端会对 WebView 做一些默认的设置,比如 Hook 用户触摸后退按钮,调用 WebView 后退方法。既然如此,就可以利用这一点,通过操纵浏览记录使用户触摸后退关闭浏览层。history想要操纵浏览记录,就不得不提history对象了。通过常用的back()、forward()、go()方法就可以自由的控制浏览器跳转到任意一个历史记录。而在 HTML5 中,history 又添加一些新的成员,允许你对浏览记录进行添加和修改却不会刷新页面,这就是解决问题的关键了。history.pushState(stateObj, title, url) 用于创建新历史记录;history.replaceState(stateObj, title, url) 用于修改当前历史记录;history.state 读取当前状态,创建历史记录时会添加状态对象;window.onpopstate 是一个事件,当历史记录被修改时会触发。
阅读全文…