vue-cli项目发布新版本,微信缓存了旧版本文件,导致页面白屏

案发小现场
小前端加班加点的终于把当前迭代的东西做好,并且无bug的通过测试,心情美滋滋。非常自信的更新到了生产环境。不到半小时的时间,大领导走到前端部门吼道:“怎么线上页面挂了”。我默默打开手机一看,不是正常么,没有挂啊。事后得知部分用户才会出现白屏问题,什么情况下会复现,我就不得而知了,有知道的小伙伴可以留言相告。

问题描述:vue-cli项目线上发布了新版本后,部分手机微信,出现页面白屏或者点击页面无法交互了。

问题解析:微信缓存了旧版本的文件,导致文件404。

解决方案
ps:之前看过很多方案,全都是瞎扯,什么加文件加版本号、html头部meta加不缓存操作。。。心累!

方案思路:项目监听错误信息,符合条件的错误,则进行跳转(刷新)当前页面。
为了能监听到整个项目,我们应该在index.html 里添加这个监听代码,且放于webpack打包文件的上面,如下:

<script>
      window.addEventListener(
        "error",
        function(e) {
          var jsLoadedErrorReload = window.sessionStorage.getItem(
            "jsLoadedErrorReload"   // 跳转的标识,存入sessionStorage。用于不可控情况下,防止一直满足条件,触发死循环性的跳转页面
          );
          const fileReg = /\/js\/((chunk-vendors)|(app))\.[a-zA-Z0-9]+/;
          const filename = e.filename || e.target.src || "";
          if (jsLoadedErrorReload !== "true" && filename.match(fileReg)) {
            window.sessionStorage.setItem("jsLoadedErrorReload", true);  // 满足条件则,存入标识
            let url = window.location.href;
            const timeStr = `timeStr=${Date.now()}`;
            url = /\?/.test(url) ? url + "&" + timeStr : url + "?" + timeStr;
            window.location.replace(url); // 跳转时添加了时间戳
          }
        },
        true
      );
    </script>

代码重点概述(敲黑板)
1、添加条件标识,jsLoadedErrorReload,防止重复性跳转页面
2、条件标识存入sessionStorage,每次重新打开公众号页面,都能做到标识jsLoadedErrorReload的初始化
3、用replace的新式跳转了当前页面地址,并且添加上了时间戳。保证跳转后访问的页面,已然是全新的资源

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值