在项目中碰到的一个问题,当我点击手机上的返回按钮时,ios上正常刷新了前一个页面,并触发了我想要执行的函数,但是在华为荣耀手机上并没有刷新。
原因: 华为荣耀手机一定是读取了页面的缓存数据(今天搞清楚了是怎么回事),导致没有刷新页面
// 新更新的内容(详见高级程序设计-13.4.7节,HTML5事件中的pageshow事件)
什么叫页面的缓存数据,原来又一个叫做bfcache的东西,这个是firfox提出的叫做"往返缓存"的一种缓存机制,用来加快用户在点击浏览器前进或者后退按钮时的速度。
这个时候,我就需要强制刷新页面了,怎么办呢。使用reload事件也没有用。
使用onpageshow事件
该事件一定要绑定在window对象上,代表用户浏览页面的时候就会触发这个事件。回调函数里面的event参数,会有一个persisted参数,利用这个参数来判断,是否需要刷新页面。如果为true,说明是从浏览器缓存中读取的数据(也就是从bfcache中拿的数据),就采取刷新页面的动作(window.location.reload())。如果为false,说明没有将页面的状态存在bfcache中。
推荐博客:https://www.cnblogs.com/wangmaoling/p/8022561.html
网友评论