Android的webview返回不刷新页面

时间:2024-04-02 07:44:19

背景:
第三方APP应用,ruby前后端不分离,列表页面,包含已读数、未读数,如果点击的是未读数据,跳转详情后,返回列表页面会刷新页面,已读、未读数应该改变,iOS能成功刷新页面并改变已读、未读数,但是Android的页面没有刷新,已读、未读数未改变。

解决思路:

1、百度查阅资料可以,onpageshow 事件在每次加载页面时触发,所以可以监听pageshow事件。如果是从缓存读取的页面,pageshow事件的event对象的persisted为true,否则返为 false(但是我从项目上来看,无论是链接跳转还是返回,persisted都是为false)

在MDN上对pageshow的解释是这样的:
Android的webview返回不刷新页面
2、 Windows对象有一个performance属性,其中的navigation对象的type表示网页的加载来源,有四个值分别是:

  1. 0:网页通过点击链接、地址栏输入、表单提交、脚本操作等方式加载,相当于常数performance.navigation.TYPE_NAVIGATENEXT。
  2. 1:网页通过“重新加载”按钮或者location.reload()方法加载,相当于常数performance.navigation.TYPE_RELOAD。
  3. 2:网页通过“前进”或“后退”按钮加载,相当于常数performance.navigation.TYPE_BACK_FORWARD。
  4. 255:任何其他来源的加载,相当于常数performance.navigation.TYPE_UNDEFINED。

综上所述,所以最终的解决方法如下:

  1. 利用navigator.userAgent判断是否为Android系统
  2. 如果为Android系统则监听pageshow事件
  3. 在pageshow事件里判断event.persisted为true,或者window.performance.navigation.type为2,则执行location.reload()刷新页面。

最终代码如下:
Android的webview返回不刷新页面
备注:如有侵权请联系删帖

参考链接:
pageshow - 事件参考| MDN
Performance API
https://blog.csdn.net/YongChao_bms/article/details/89714426