项目中script加载错误的处理

在项目中遇到的一个难点,无论是我们用的原生js还是用的框架最后上线的时候都会是打包好之后,打包好之后的js文件中都会自己或者自动引入script,在生产环境中会出现其中有一个script无法加载成功的时候怎么处理,当js加载不出来的时候页面是显示不出来的,最起码功能是不正常的,现在都是单页面应用,js加载不成功的话对页面影响还是比较大的,所以我们需要去处理这个问题。。。

1.就是域名的错误,公司有很多域名一个一个换。很简单,就两步,1.什么时候重试?2.如何重试?

<script src="http://abcd.com/js/plugin.js"></script>

2.什么时候重试?当然是js加载失败的时候重试了。。怎么重试。。看看下面

  <script>
    //公司有的域名
    const domains = [
      'aksknkd.com',
      'siahkds.com',
      'jahjs.com'
    ]
    //简历隐射关系(一次一次替换尝试)
    const retry = {}
    window.addEventListener('err', (e) =>
    {
      //因为会有很多种错误,除了加载错误其他的都不处理
      if (e instanceof ErrorEvent || e.target.tagName != 'SCRIPT') {
        return
      }
      const url = new URL(e.target.src);
      //加载失败的域名
      const pathName = url.pathName;
      //看有没有记录
      if (!(pathName in retry)) {
        retry[pathName] = 0;
      }
      const index = retry[pathName];
      //不能越界
      if (index > domains.length) {
        return
      }
      const newDomain = domains[index];
      url.host = newDomain;
      document.write(`\<script src="${url.toString()}"><\/script>`)
      /****这样会导致加载顺序变化需要换一种阻塞页面解析的方式
      // const script = document.createElement('script');
      // script.src = url.toString();
      // //加到错误之前
      // e.target.parentElement.insertBefor(script, e.target);
      retry[pathName]++;
      e.target.remove();
    }, true)
  </script>

完事。。。。。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值