popstate和pageshow

监听页面返回

popstate

当活动历史记录条目更改时,将触发popstate事件。如果被激活的历史记录条目是通过对history.pushState()的调用创建的,或者受到对history.replaceState()的调用的影响,popstate事件的state属性包含历史条目的状态对象的副本。

需要注意的是调用history.pushState()history.replaceState()不会触发popstate事件。只有在做出浏览器动作时,才会触发该事件,如用户点击浏览器的回退按钮(或者在Javascript代码中调用history.back()或者history.forward()方法)

不同的浏览器在加载页面时处理popstate事件的形式存在差异。页面加载时Chrome和Safari通常会触发(emit )popstate事件,但Firefox则不会。

window.onpopstate触发时机:
1)点击浏览器的前进、后退按钮,安卓的后退按钮
2)在js中调用history.go()      history.forward()       history.back()
3)a标签的锚点
4)当网页加载时,各浏览器对popstate事件是否触发有不同的表现,Chrome 和 Safari会触发popstate事件, 而Firefox不会

tip: 1.window.open(href)跳转网页进行切换,不会触发popstate

pageshow

当一条会话历史记录被执行的时候将会触发页面显示(pageshow)事件。(这包括了后退/前进按钮操作,同时也会在onload 事件触发后初始化页面时触发)

tip: 1.锚点切换页面时,不会触发pageshow

visibilitychange

页面显示和隐藏的时候会触发。注意:第一次加载完成页面的时候不会触发该方法 

触发时机:当在浏览器中切换tab项,或者页面从后台唤醒(即app间的切换),这时候会触发visibilitychange事件两次:先是document.visibilityState=hidden,然后是document.visibilityState=visible

原文地址:https://www.cnblogs.com/wangxirui/p/14943404.html