Vue移动端开发IOS浏览器通过history回退时页面不刷新或未正常发起请求,两种处理方法,原理都差不多


移动端微信公众号项目进行UAT测试时遇到一个问题,ios微信浏览器访问项目时回退上一级页面异常,未刷新。
网上看的是由于ios回退是从缓存中读取数据的,由于开发环境不方便测试,找到如下解决方法

经测试是有效的,判读用户设备为ios时强制刷新。
第一种,强制刷新

mounted () {
    this.$nextTick(()=>{
    //首页跳转返回 IOS不兼容页面自动刷新问题
    var u = navigator.userAgent,
    app = navigator.appVersion;
    var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器
    var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
    if(isiOS){
      window.onpageshow = function(event) {
      
if (event.persisted) {
          window.location.reload()
      }
      };
    }
    })
  },

第二种,判断用户是通过历史记录返回的然后重新请求

mounted () {
    this.$nextTick(()=>{
    //首页跳转返回 IOS不兼容页面自动刷新问题
    var u = navigator.userAgent,
    app = navigator.appVersion;
    var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器
    var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
    if(isiOS){
      window.onpageshow = function(event) {
      if (event.persisted) {
         在这个地方写请求方法
      }
      };
    }
    })
  },

相关