mobile+PC白屏问题解决(react15.6)

26 篇文章 0 订阅

mobile+PC白屏问题解决(react15.6)

出现白屏的原因:因为后端加了缓存,用户使用的时候会有缓存,当线上更新新的版本以后,当打开页面以后会读取本地缓存,因为之前的js文件已经被替换,所以找不到文件,页面就出现了白屏。给version文件加了时间戳,每次进index.html的时候,会指向下面的script标签里面的代码,因为时间戳不一样,所以每次都会调用一下version。需要每次在发新版本的时候,手动替换一下version里面的js的src路径。就可以解决白屏
1.index.html
在index.html里面加下面代码,单页面应用,刚开始加载index.html的时候对读取下面的js,给version文件加时间戳

2.verson.js
注意:version.js和index.html是同级的文件,在现在这个系统里放在public下面,npm run build以后就会自动把index和version放在同级,应该是webpack的配置问题

(function () {
  function loadScript (scriptSrc, cb) {
    //创建script元素
    var el = document.createElement('script')
    //给script标签价src属性
    el.setAttribute('src', scriptSrc)
    //这里判断el的状态,是在script标签加载完以后,在执行他的回调
    el.onload = el.onreadystatechange = function () {
      if (!this.readyState || 'loaded' === this.readyState || 'complete' === this.readyState) {
        cb && cb()
        this.onload = this.onreadystatechange = null
      }
    }
    //把元素加到body里面,作为body的子元素
    document.body.appendChild(el)
  }
  //调用加载script的函数

注意:因为这个地方,踩过好多坑,刚开始我的写法是先加载mianfest文件,然后把后三个js的src属性放在数组里,因为觉得数组是有序的他会按照顺序加载,但是发到线上以后,还会有白屏的问题,这次白屏的问题是因为页面报错,因为这几个js文件执行是有顺序的,顺序错误会导致后面js要用到的函数或者变量没有获取到而导致页面错误,像这种写法是按顺序加载的,加载完以后才会加载下一个,现在我们这种方法是动态创建script标签,当我们

  const restScripts = ['normalizec08b3a6fd30deb82e30f.js','vendorb9dee843484bb3fa725c.js', 'mainba5fe707d66e9074dcaf.js'] loadScript('manifeste09dd3e40a50f97840a6.js', function () { restScripts.map(v => loadScript(v)) })

这种写法,后面数组里面的js,虽然数组是有序的,但loadScript本身是异步的,不用回调就是谁先准备好谁上,简单说,按顺序发了4个请求,到底哪个请求先返回,我们是不确定的。所以我用了下面这种方式来写。

  loadScript('manifest.feb569.js', function () {
    loadScript('normalize.cd4ee5.js',function(){
      loadScript('vendor.f39f2f.js', function(){
        loadScript('main.81cebb.js')
      })
    })
  })
})()
// <script type="text/javascript" src="manifest.feb569.js"></script>
// <script type="text/javascript" src="normalize.cd4ee5.js"></script>
// <script type="text/javascript" src="vendor.f39f2f.js"></script>
// <script type="text/javascript" src="main.81cebb.js"></script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值