美酒没故事° 2023-02-03 11:35 采纳率: 37.8%
浏览 93
已结题

js怎么引入线上的文件?

比如要引入xlsx文件,import只能引入本地的文件,import xlsx from "https://unpkg.com/xlsx@0.18.5"不行。那在线的js文件怎么引入?并且拿到引入返回结果?就像调接口那样

本来在index.html里使用cdn引入全部依赖,但是全部加载完依赖才能渲染出页面,经常50多秒,可能是依赖太多了,我想有没有什么办法可以像引入本地文件那样引入线上的js文件?在需要的地方引一下直接用,减少首页的白屏时间

  • 写回答

7条回答 默认 最新

  • 美酒没故事° 2023-03-29 13:07
    关注

    封装加载项:

    // cdn引入
    const scripts = [
      // "https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js",
      "https://webapi.amap.com/maps?v=1.4.15&key=f584dabfcc1330f3c545160674a56ea1",
    ]
    
    export function initScript() {
      for (let url of scripts) {
        loadScript(url).catch((err) => {
          setTimeout(() => {
            loadScript(url)// 再次加载
          }, 1000)
        });
      }
    }
    
    
    
    const css = [
      "https://icons.getbootstrap.com", // 使用:<i class="bi bi-window"></i>
      "https://unpkg.com/bootstrap-icons@1.5.0/font/bootstrap-icons.css",
      "https://unpkg.com/font-awesome@4.7.0/css/font-awesome.min.css"
    ]
    
    export function initStyle() {
      for (let url of css) {
        loadStyle(url).catch((err) => {
          setTimeout(() => {
            loadStyle(url)// 再次加载
          }, 1000)
        });
      }
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    // 封装加载依赖的方法
    function loadScript(url) {
      return new Promise((resolve, reject) => {
        const scripts = document.querySelectorAll("script");
        let isHas; // 是否已经存在了
        for (let item of scripts) {
          isHas = item.src === url;
        }
    
        // 没存在就创建
        if (!isHas) {
          // 创建script标签,引入外部文件
          let script = document.createElement("script");
          script.type = "text/javascript";
          script.src = url;
          document.body.appendChild(script);
    
          script.onload = () => {
            console.log(url + " 引入成功");
            resolve();
          };
          script.onerror = () => {
            console.log(url + " 引入失败");
            reject();
          };
        }
      })
    }
    // 封装加载样式文件的方法
    function loadStyle(url) {
      return new Promise((resolve, reject) => {
        const links = document.querySelectorAll("link");
        let isHas; // 是否已经存在了
        for (let item of links) {
          isHas = item.href === url;
        }
    
        // 没存在就创建
        if (!isHas) {
          // 创建script标签,引入外部文件
          let link = document.createElement("link");
          link.rel = "stylesheet";
          link.href = url;
          document.body.appendChild(link);
    
          link.onload = () => {
            console.log(url + " 加载成功");
            resolve();
          };
          link.onerror = () => {
            console.log(url + " 加载失败");
            reject();
          };
        }
      })
    }
    

    在登陆成功的事件后执行:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 4月6日
  • 已采纳回答 3月29日
  • 修改了问题 2月8日
  • 修改了问题 2月7日
  • 展开全部

悬赏问题

  • ¥15 nrf52810-c三个a 程序
  • ¥15 lego-loam跑出来的roll误差很大
  • ¥50 求一个半透明没有锯齿的圆角窗体的实现例子
  • ¥15 STM32cubeMX里的FreeRTOS无法释放内存
  • ¥15 CATIA有些零件打开直接单机确定终止
  • ¥15 请问有会的吗,用MATLAB做
  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对