【前端】古法动态按需加载JavaScript(兼容非模块脚本)

这篇文章也可以在我的博客中阅读。

关于本文

  • 介绍非模块脚本(传统脚本)使用JavaScript动态载入的方法

概要

目前有许多动态按需载入JavaScript模块的方法,比如import和require,但许多老旧的JavaScript脚本由于涉及到全局变量的操作,不支持以模块的形式载入(会出现各种错误),如果需要在代码中动态载入某些老旧的非模块脚本,这个脚本可以助你一臂之力。

脚本特点

优点

  • 简短
  • 不需要安装第三方库
  • 兼容现阶段所有浏览器(除IE)
  • 异步加载
  • 支持多个备用链接(用途:CDN炸了可以回退到本地)

缺点

  • 不具备依赖项加载功能
  • 不检测加载的内容到底是不是JavaScript(错误的内容返回200也会被当做JavaScript)

脚本

主要是动态组织script元素,其中使用Promise对加载结果进行跟踪。

function jsLoader(urls, async = true, type = "text/javascript") {
    var load = (url) => {
        return () => new Promise((resolve, reject) => {
            const scriptEle = document.createElement("script");
            try {
                scriptEle.type = type;
                scriptEle.async = async;
                scriptEle.src = url;

                scriptEle.addEventListener("load", () => resolve());
                scriptEle.addEventListener("error", () => { console.log("fallback to next src..."); rejectHandler(); });

                document.body.appendChild(scriptEle);
            } catch (error) {
                rejectHandler(error);
            }

            var rejectHandler = (e) => {
                document.body.removeChild(scriptEle);
                reject(e);
            }
        });
    };

    return urls.reduce((p, url) => p.catch(load(url)), Promise.reject()).catch((e) => { console.log("oops, all src failed"); throw e; });
}

用法

示意

  • 传入存放备选src的数组(这里选的第1,2,4个链接都是无效的)
  • 可使用Promise语法对脚本进行控制
urls = ["https://wrong.page", "2", "https://cdn.jsdelivr.net/npm/activate-power-mode@1.0.0/dist/activate-pow1er-mode.min.js", "4"]
jsLoader(urls)
	.then(() => console.log("module loaded")) //加载成功
	.catch(() => { }); //出错

输出

  • 成功载入后,后面的链接不会再继续载入
  • 失败时会有log输出,不需要的可以注释掉
GET https://wrong.page/ net::ERR_CONNECTION_CLOSED
fallback to next src...
GET file:///H:/test/2 net::ERR_FILE_NOT_FOUND
fallback to next src...
module loaded
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
倪元璐是明代晚期的一位书法家,他的草书以碑入草,兼容并包的特点而闻名。他在书法创作中融合了魏晋南北朝书法家王献之和钟繇的风格。王献之是王羲之的儿子,他在书法上勇于创新,善于变通古法,尤其在行书中夹杂楷书和草书,开创了新的风格。而钟繇则是东汉时期的书法家,他擅长楷书,被后人称为“楷书之祖”。倪元璐在草书创作中,将王献之的变通古法和钟繇的楷书风格相结合,形成了自己独特的风格。他的草书既有魏晋南北朝书法家的变化多端、率意颠逸的特点,又保持了魏晋法度的传统。因此,倪元璐的草书以碑入草,兼容并包,展现了他对古法的尊崇和对创新的追求。 #### 引用[.reference_title] - *1* *3* [魏晋南北朝书法家钟繇、王羲之、王献之](https://blog.csdn.net/zhanmin618/article/details/125367150)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [名帖345 怀素 草书《论书帖》](https://blog.csdn.net/m0_72470684/article/details/130564467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值