html的head中异步按顺序加载script脚本的兼容写法

HTML中的<script>标签 在js学习阶段,一直使用<script>元素,但对它了解较少。看了大家推荐的红宝书之后,学到了许多关于它的知识,收获颇多。本篇文章围绕<script>元素简单讲一下使用、行内脚本与外部脚本等。 一、<script>使用 两种方式:通过它直接在网页中嵌入JavaScript代码、通过它在网页中包含外部JavaScript文件。 直接在网页中嵌入JavaScript代码 <script> // 嵌入行内JavaScript代码,直接把代码放在<scr 阅读详情

项目需求:客户端有重复的脚本引入,不想在服务端渲染,备注:此需求常见于小公司比较懒的做法。

关键代码

html 部分

<head>
    <meta charset="UTF-8">
    <script id="scriptLoader1" src="/js/scriptLoader.js"></script>
    <script id="scriptLoader2">
        scriptLoader.init(["./your-script.js"]);
    </script>
</head>

脚本scriptLoader.js部分:

// 公用script加载器,避免页面引用代码的冗余
(function(window) {
    // 构造函数
    var ScriptLoader = function() {};
    var head = document.getElementsByTagName('head')[0]; // 获取head对象
    // 原型对象
    ScriptLoader.prototype = {
        init: function(scriptArr) {
            // scriptArr 是自定义的数组

            // commonScriptArr 是通用script数组 重复引用的脚本
            var commonScriptArr = [
                "/lib/your-script-1.min.js",
                "/lib/your-script-2.min.js",
                "/lib/your-script-2.min.js",
                "/lib/your-script-4.min.js",
                "/lib/your-script-6.min.js"
            ];

            // 传参处理:如果存在并且类型不是数组,那么提示程序员参数传递错误
            if (!(scriptArr && typeof scriptArr === 'object' && Array == scriptArr.constructor)) {
                return alert("请传递数组类型");
            }

            // 参数存在且是数组 或者 参数不存在的脚本列表处理
            var arr = scriptArr ? commonScriptArr.concat(scriptArr) : commonScriptArr; // 加入自定义脚本
            this.loadScript(arr); // 异步按序添加head中的脚本
            this.removeSelf(); // 移除自身
        },
        // 异步顺序加载
        loadScript: function(urlArr) {
            if (!urlArr.length) {
                return;
            }
            var that = this;
            var script = document.createElement("script"); // 加载 script
            script.type = "text/javascript";
            if (script.readyState) {
                //IE 
                script.onreadystatechange = function() {
                    if (script.readyState == "loaded" || script.readyState == "complete") {
                        script.onreadystatechange = null;
                        that.loadScript(urlArr);
                    }
                };
            } else {
                //Others: Firefox, Safari, Chrome, and Opera 
                script.onload = function() {
                    that.loadScript(urlArr);
                };
            }

            var url = urlArr.splice(0, 1)[0]; // 使用第一个,并且对原数组进行减1操作
            script.src = url;
            head.appendChild(script);
        },
        // 移除自身脚本
        removeSelf: function() {
            var scriptLoader1 = document.getElementById("scriptLoader1");
            var scriptLoader2 = document.getElementById("scriptLoader2");
            scriptLoader1 && head.removeChild(scriptLoader1);
            scriptLoader2 && head.removeChild(scriptLoader2);
        }
    }
    window.scriptLoader = new ScriptLoader(); // 暴露给全局对象
})(window);

scriptLoader.init传入的脚本: your-script.js部分

console.log("test);

然后可以测试加载顺序了,不过这种做法,实际上对大型项目是很不友好的,最好是服务端来做。根据项目需求来定,另外,css脚本也同样可以适用此方法,如果存在很多共同的css引用,参考此script的做法。

零基础学习大气污染模式(WRF、WRF-chem、smoke、camx等) 阅读详情

相关推荐

AFSim 2.9实战指南:从入门到精通的中文教程

本文是AFSim 2.9的实战中文教程,旨在帮助用户从零开始掌握这一先进的仿真框架。内容涵盖从环境安装、运行第一个“Hello World”仿真,到深入理解实体、组件、想定编辑器等核心概念,并进阶探讨动力学建模、传感器仿真与红蓝对抗想定构建。最后,指南还提供了效能分析与实战排错技巧,帮助用户将仿真结果转化为有价值的量化数据,适用于军事、航空航天等领域的复杂系统行为模拟研究。

weixin_29294395的博客 363

JavaScript script标签同步异步加载过程

JavaScript script标签同步异步加载过程

weixin_44000173的博客 2213

从Delphi 7到Delphi 10.4.1的代码迁移:关键挑战与实用解决方案

本文详细探讨了从Delphi 7升级到Delphi 10.4.1进行代码迁移的关键挑战与实用解决方案。核心内容包括应对Unicode字符串处理、64位数据类型变化、VCL/FMX界面框架选择、第三方组件迁移以及数据库层现代化改造(如从BDE迁移至FireDAC)。文章为开发者提供了系统的迁移前准备、核心问题攻克策略及测试落地指南,旨在帮助团队高效、平稳地完成系统现代化升级。

weixin_29250403的博客 533

如何保证script标签的加载顺序

本章博文主要解决script标签的加载顺序问题。

李卓书 2730

PLDM入门(七):FRU Data Format

每个字段为TLV(Type-Length-Value)格式,具体类型、长度范围和值定义需参考。通过条件过滤(记录句柄、类型、字段类型等)分块获取FRU记录数据(可选功能)。整个FRU数据表由多个FRU记录数据块组成,每个数据块对应表2的结构(即包含。决定,每个字段按顺序排列(Type→Length→Value)通过分块传输方式写入FRU记录表数据(需终端支持写入操作)。(文档未提供表5内容,需结合标准文档完整版)。、字段数量、编码类型及具体字段的TLV数据)。无请求数据(空请求)。

weixin_44032634的博客 1764

JavaScript异步编程(四) 异步的脚本加载

异步的脚本加载 问题: <head>标签里的大脚本会滞压所有页面渲染工作,使页面在脚本加载完毕前一直处于白屏; <body>标签末尾的大脚本使用户只能看到静态页面,原本应进行渲染的地方却是空的; 解决方案: 对脚本分而治之; 负责让页面更好看、更好用的脚本立即加载,可稍后再加载的脚本稍后再加载。 HTML5的async/defer属...

weixin_30877493的博客 114

Bochs源码分析 - 26:8259中断控制器介绍

前言 现在我们跟着《x86/x64体系探索及编程》来分析17章内容 -- 8259中断控制器。这个是涉及硬件的,很遗憾,除了大学期间使用STM32搞过一个计算器,其余就没多少硬件编程经验,我在淘宝上找了下大概是这个东东。 https://pdos.csail.mit.edu/6.828/2010/readings/hardware/8259A.pdf 上面是8259A的芯片手册,里面讲的还是挺详细的,虽然里面很多东西还是看不太懂,但是结合着《x86/...

WriteAnything_的博客 971

js在html中的加载执行顺序

javaScript文件(下面简称脚本文件)需要被HTML文件引用才能在浏览器中运行。在HTML文件中可以通过不同的方式来引用脚本文件,我们需要关注的是,这些方式的具体实现和这些方式可能会带来的性能问题。 当浏览器遇到(内嵌)标签时,当前浏览器无从获知javaScript是否会修改页面内容。因此,这时浏览器会停止处理页面,先执行javaScript代码,然后再继续解析和渲染页面。同样的情况也

soman的博客 7133

cesium 气象云(体积云)

本文介绍了基于Cesium的气象云渲染技术方案,其核心是通过GPU加速的光线投射算法实现气象云的三维可视化。方案采用分层架构设计:GPU计算层由顶点着色器和片段着色器组成,负责光线投射计算、3D纹理采样和颜色映射;CPU控制层处理数据预处理、纹理创建和参数配置。关键技术包括:顶点着色器计算相机位置和光线方向,片段着色器实现光线步进采样、颜色映射和半透明混合。该方案高效解决了气象数据与地理场景的融合问题,支持云图、温度场等复杂三维气象数据的实时渲染,具有高真实感和良好性能。

God's asylum的博客 1205

【报错解决】OpenClaw 报错 `openclaw: command not found`:全局命令未加入系统 PATH 的深度排查与修复指南

在国产AI工具链开发中,OpenClaw作为关键命令行工具常出现command not found报错。本文深度分析该问题的根源——Linux环境变量PATH未包含用户级安装目录(~/.local/bin)。通过四种解决方案(临时PATH修改、永久配置、软链接、虚拟环境处理)和排错Checklist,揭示"命令存在却找不到"的本质是路径配置问题,特别适用于Docker/国产Linux/非root环境。文中强调理解Linux工具链机制对国产AI开发的重要性,并指出这是开发者掌握环境

博客 5385

<script> 标签放在 <head> 中和放在 <body> 底部的区别

建议:将 标签放在 的底部。

m0_63306944的博客 627

创建 Qt Quick 项目

来看看如何使用 Qt Creator 创建 Qt Quick 项目!

青春不老,奋斗不止! 1万+

HTML中Javascript脚本的加载和执行

抛出问题:为什么我们建议把script标签放在&lt;/body&gt;之前而不是head里面呢?为什么有时候我们访问DOM却访问不到呢?javascript代码是怎样的执行顺序?有没有什么操作是可以影响它的执行顺序?这一切的答案都可以从本文中获取,也就是要说的脚本的执行顺序问题。您且往下看。 理论支持:要解决上面的问题,我们需要明白在html中javascript的加载和执行顺序问题,先了解几...

Cassie's blog 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

html-javascript放在head和body的区别以及js文件加载带来的阻塞

文章目录1. JavaScript放在head和body的区别2. js文件加载的阻塞 1. JavaScript放在head和body的区别 在HTML head部分中的JavaScripts会在被调用的时候才执行。 在HTML body部分中的JavaScripts会在页面加载的时候被执行。 head 部分中的脚本: 需调用才执行的脚本或事件触发执行的脚本放在HTML的head部分中。当你把脚本放在head部分中时,可以保证脚本在任何调用之前被加载。 body 部分中的脚本: 当页面被加载

风起 4104

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

关于script标签在HTML页面放置的位置

一般script标签会被放在头部或尾部,头部就是head标签里,尾部就是body里,也有放在body闭合标签之后。 1、script标签放在head标签内部 <head> <title>获取DOM元素</title> <script> var myElement = document.getElementById("atag"); console.log(myElement); </script&g

weixin_45832482的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

解决HTML的script标签在head中无法访问DOM的问题

本文用实例介绍如何解决HTML的script标签在head中无法访问DOM的问题。

IT利刃出鞘的博客 954

html页面加载顺序

html文档是自上而下加载的 试想一下,在你的网页还没展现出来时,就匆匆忙忙运行了一大堆JavaScript,或者你想先执行完脚本1,再执行脚本2,结果却不如你所愿,这将会给用户带来多么糟糕的体验!!! script和DOM是同步加载的 这里先假设某html的所有JavaScript没添加window.onload 或 $(function(){})等,由于script和DOM是同步解析的,...

Besam-juajua的博客 6007

html,css,js代码加载顺序问题

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

hhthwx的博客 5321

JavaScript 文件加载执行顺序

你不知道的关于众所周知,<script>标签是用于将JavaScript代码插入到HTML的主要方法。它具有内联和外部形式两种使用方式。 内联代码是将JavaScript代码直接写在标签里,外部形式则是通过标签的src属性引入外部的JavaScript文件。当<script>标签具有src属性的时候,标签内的代码会被忽略,如下所示: <!DOCTYPE html> <html> <head> <title>Example HTML

LvLin_60的博客 3347

WHAT - script 加载(含 async、defer、preload 和 prefetch 区别)

你清楚 script 的加载机制吗,包括 async、defer、preload 和 prefetch 之间的区别。以及对于打包构建之后的html都是如何加载 dist bundle 等资源的吗?

weixin_58540586的博客 2130

HTML <script>元素的10个属性

HTML <script>标签的10个属性

前端攻城狮 2392

HTML中 `<script>` 标签的用法

摘要:<script>标签是HTML中嵌入JavaScript代码的核心标签,支持内联和外部引用两种方式。关键属性包括src(外部文件路径)、type(指定脚本类型)以及async/defer(控制加载执行顺序)。最佳实践建议将脚本放在<head>中并添加defer属性,或使用type="module"实现模块化开发。不同加载方式对页面性能影响显著:同步加载会阻塞渲染,而async和defer能提升加载效率。现代Web开发推荐使用模块化方案和延迟执行策略,以优化页

qq_39980997的博客 1410

html 资源异步,异步加载JS脚本

JavaScript脚本对现代网站来说是必不可少的。当用户访问站点,需要下载各种资源,例如JS脚本,CSS,图片,iframe等。浏览器下载除JS外的资源时,会并行下载,以提高性能。但下载JS脚本时,会禁止并行下载(称为脚本阻塞Scripts Block Downloads)。浏览器遇到JS时,必须等JS下载,解析,执行完后,才能继续并行下载下一个资源。原因是JS可能会改变页面或改变JS间的依赖关...

weixin_39761195的博客 688

script 加载顺序问题的延展研究

今天群里有人问为什么会出现脚本的加载顺序与定义脚本顺序不一致的问题,这个问题引起了我的好奇,经过一番调研,有了这篇文章。 这是一个伪命题吗? 首先,W3C 推荐 script 脚本应该被立即加载和执行,其次,经过网络搜索,我只发现了 1 例相同的问题,所以这个问题的真伪其实还有待进一步验证,但是从逻辑上说,浏览器会并行加载静态资源,对于 Chrome,可以并行加载 6 个资源,如果其中一个资源...

weixin_30511107的博客 177

关于<script>的脚本执行机制:静态加载与动态生成

动态生成 <script> 标签并设置 src 的方式可以绕过 CORS 限制(而在脚本内通过 fetch/XHR 发起的 HTTP 请求会受CORS限制),但只能用于 JSONP这种特定场景,而不是通用的跨域请求方法。脚本 URL 需根据运行时条件(如用户权限、设备类型、用户语言等)动态生成;用户触发特定行为(如点击按钮、滚动到某位置)后再加载脚本;脚本加载失败时,动态回退到备用 CDN等应用场景;JSONP跨域请求(获取远程数据)。延迟加载,减少首屏阻塞;

阿坨的博客 990
上一篇: 考研英语 - word-list-49
下一篇: 考研英语 - word-list-50
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值