美酒没故事° 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日
  • 展开全部

悬赏问题

  • ¥60 pb数据库修改或者求完整pb库存系统,需为pb自带数据库
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路