解决SDK插件多个动态资源异步加载,初始化报错问题

最近在项目中需要加载和使用一个SDK插件,需要按顺序加载CSS、js等动态资源,资源加载完成后,完成初始化即可正常使用该SDK插件。开发过程中因为忽略了动态资源都是异步加载,导致初始化失败,插件无法正常使用,以下两种方案可以解决该问题。

以下方法为动态加载css、js资源方法

loadHead(url) {
      const link = document.createElement("link");
      link.type = "text/css";
      link.rel = "stylesheet";
      link.href = url;
      document.head.appendChild(link);
},
loadHeadJs(url) {
      const s = document.createElement("script");
      s.type = "text/javascript";
      s.src = url;
      document.head.appendChild(s);
},
loadBody(url) {
      const s = document.createElement("script");
      s.type = "text/javascript";
      s.src = url;
      document.body.appendChild(s);
}

  1. 添加定时器,延时初始化(网络不佳,可能依然会报错)

    //加载资源
     loadHead(cssUrl)
     loadHeadJs(jsHeadUrl)
     loadBody(jsBodyUrl)
     setTimeout(() => {
         //执行初始化方法 
     }, 1000);
    
    
  2. promise实现加载完初始化(推荐)

    loadHead(url) {
        const link = document.createElement("link");
        link.type = "text/css";
        link.rel = "stylesheet";
        link.href = url;
        document.head.appendChild(link);
    },
    loadHeadJs(url) {
        const s = document.createElement("script");
        s.type = "text/javascript";
        s.src = url;
        document.head.appendChild(s);
        //添加onload回调
        s.onload = function(){
            reslove();
        }
    },
    loadBody(url) {
        const s = document.createElement("script");
        s.type = "text/javascript";
        s.src = url;
        document.body.appendChild(s);
        //添加onload回调
        s.onload = function(){
            reslove();
        }
    }
    //加载资源
    loadHead(cssUrl);
    let a = loadHeadJs(jsHeadUrl);
    let b = loadBody(jsBodyUrl);
    promise.all([a,b]).then(()=>{
        //执行初始化方法 
    })
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值