背景:
第三方APP应用,ruby前后端不分离,列表页面,包含已读数、未读数,如果点击的是未读数据,跳转详情后,返回列表页面会刷新页面,已读、未读数应该改变,iOS能成功刷新页面并改变已读、未读数,但是Android的页面没有刷新,已读、未读数未改变。
解决思路:
1、百度查阅资料可以,onpageshow 事件在每次加载页面时触发,所以可以监听pageshow事件。如果是从缓存读取的页面,pageshow事件的event对象的persisted为true,否则返为 false(但是我从项目上来看,无论是链接跳转还是返回,persisted都是为false)
在MDN上对pageshow的解释是这样的:
2、 Windows对象有一个performance属性,其中的navigation对象的type表示网页的加载来源,有四个值分别是:
- 0:网页通过点击链接、地址栏输入、表单提交、脚本操作等方式加载,相当于常数performance.navigation.TYPE_NAVIGATENEXT。
- 1:网页通过“重新加载”按钮或者location.reload()方法加载,相当于常数performance.navigation.TYPE_RELOAD。
- 2:网页通过“前进”或“后退”按钮加载,相当于常数performance.navigation.TYPE_BACK_FORWARD。
- 255:任何其他来源的加载,相当于常数performance.navigation.TYPE_UNDEFINED。
综上所述,所以最终的解决方法如下:
- 利用navigator.userAgent判断是否为Android系统
- 如果为Android系统则监听pageshow事件
- 在pageshow事件里判断event.persisted为true,或者window.performance.navigation.type为2,则执行location.reload()刷新页面。
最终代码如下:
备注:如有侵权请联系删帖
参考链接:
pageshow - 事件参考| MDN
Performance API
https://blog.csdn.net/YongChao_bms/article/details/89714426