news 2026/5/29 23:18:23

引入 JavaScript 的 script 标签究竟有多少用法?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
引入 JavaScript 的 script 标签究竟有多少用法?

HTML 版本不停的更新迭代,也导致浏览器支持的写法眼花缭乱,就拿 script 标签来说,刚刚入行的那会儿就只知道用来写内联的 js 代码,后来又学到了引入 js 文件,ES 模块规范化之后又知道能用来引入模块化的 js 代码,可这就是它的全部了吗??

然而...并不是!!!

各种用法

看看 script 千奇百怪的用法,一定有你没见过的~~

1、内联脚本

如文章开头说的一样,直接用来写内联脚本,本公众号大部分文章都是使用内联脚本的方式所写:

<script>

const name = '公众号:前端路引'

console.log(name)

</script>

2、引入外部脚本

使用 src 属性直接引入外部脚本,这是目前大部分前端项目的用法,虽然 vite 直接使用 ES 模块化打包,但要兼容低版本浏览器还是得转成普通的 js 文件引入:

<script src="project/path/script.js"></script>

3、defer 延迟

标签的 defer 属性可以控制脚本异步加载,并且能让脚本顺序执行:

<script defer src="project/path/script1.js"></script>

<script defer src="project/path/script2.js"></script>

以上脚本就算写在 head 标签中,也不会阻止 dom 解析,而且 script2.js 一定是在 script1.js 之后执行。

4、async 异步

async 也能控制脚本异步加载,但不同的是 async 加载的脚本无法保证脚本执行顺序。

<script async src="project/path/script1.js"></script>

<script async src="project/path/script2.js"></script>

以上脚本没办法保证 script1.js 一定会先执行!!!此属性一般多用于加载与项目流程无关的一些 js 文件,比如说:统计代码、广告代码等等。

5、动态加载脚本

使用 js 创建 script 标签引入 js 文件,即可实现 js 脚本的动态加载:

const script = document.createElement('script');

script.src = 'dynamic.js';

script.onload = function () {

console.log('dynamic.js 加载成功!');

}

script.onerror = function () {

console.log('dynamic.js 加载失败!');

}

// 脚本插入到页面中才会开始加载

document.head.appendChild(script);

6、资源完整性校验

integrity 属性能用于校验资源是否被篡改,详细算法参考:https://developer.mozilla.org/zh-CN/docs/Web/Security/Subresource_Integrity

<script src="https://cdn.xxx.com/jquery.js" integrity="sha384-...">

</script>

7、跨域控制

crossorigin 属性用于控制跨域请求的凭据传递:

<script src="https://other-domain.com/script.js" crossorigin="anonymous"></script>

anonymous:不发送凭据(如 Cookies)

use-credentials:发送凭据

8、ES 模块

使用 type="module" 即可在 script 标签内使用 ES 模块语法,这与浏览器的版本有关,一些低版本可能并不支持!!

<script type="module" src="main.mjs"></script>

<script type="module">

import { foo } from './foo.js';

</script>

9、nomodule 兼容

nomodule 属性,用于兼容不支持 ES 模块的浏览器,如果浏览器不支持 ES 模块,则 nomodule 属性下的脚本会被执行,反之则不会执行。

<script nomodule src="project/path/fallback.js"></script>

10、动态导入

ES 模块允许在代码执行时导入模块,此方式就称之为 动态导入:

<script type="module">

const isMobile = navigator.userAgent.match(/mobile/i);

if (isMobile) {

import('./project/path/mobile.js').then(module => {

module.default();

})

}

</script>

11、模块映射

type="importmap" 属性允许指定 ES 模块的映射关系,在后续书写时候就不必再写完整的模块路径,可以只写模块名:

<script type="importmap">

{

"imports": {

"lodash": "https://cdn.jsdelivr.net/npm/lodash@4.17.21/+esm"

}

}

</script>

<script type="module">

import _ from "lodash"; // 实际加载 CDN 资源

_.chunk([1, 2, 3], 2);

</script>

12、模版字符串

利用自定义的 type 属性,可以将一些 HTML 字符串写在 script 标签中,比如 vue 的模版字符串:

<script type="text/x-template" id="index">

<div class="index">

<h3>点击历史记录跳转会保存滚动条位置</h3>

<p v-for="(item,index) in list" :key="index">

<template v-if="index % 8 !== 0">

{{ index }}

</template>

<template v-else>

<p><a href="javascript:;" @click="$router.go(1)">历史记录前往下一页</a></p>

<router-link :to="{ name: 'details' }">跳转前往详情页</router-link>

</template>

</p>

</div>

</script>

<script>

var list = (new Array(50)).fill('1')

Vue.component('Index', {

template: '#index',

data: function () {

return {

list: list

}

},

})

</script>

实验性属性

fetchpriority:允许指定外部脚本的加载优先级。有效值:high/low/auto

blocking:可以指定在脚本加载时,浏览器中的页面渲染应该被阻断。有效值:render

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 10:47:02

毕设 深度学习yolo11森林火灾预警烟雾检测系统(源码+论文)

文章目录 0 前言1 项目运行效果2 课题背景2.1. 森林火灾的全球现状与危害2.2. 传统森林火灾监测技术的局限性2.2.1 人工巡逻监测2.2.2 卫星遥感监测2.2.3 地面传感器网络 2.3. 计算机视觉技术在火灾检测中的应用发展2.4. 本课题的研究价值与创新点2.4.1 理论价值2.4.2 技术创新…

作者头像 李华
网站建设 2026/5/28 15:06:01

31、探索 Linux 安装 DVD-ROM:功能、使用与故障解决

探索 Linux 安装 DVD-ROM:功能、使用与故障解决 1. DVD-ROM 内容概述 DVD-ROM 包含了安装和运行多种 Linux 发行版所需的一切,如 Fedora Core 3、Knoppix 3.6、Linspire 4.5、Mandrake 10.1、SuSE 9.2 和 Xandros 2.5,相当于 11 张 CD-ROM 的内容。主要聚焦于 Fedora Core…

作者头像 李华
网站建设 2026/5/22 13:05:11

Fast GraphRAG终极指南:5分钟快速部署智能知识检索系统

Fast GraphRAG终极指南&#xff1a;5分钟快速部署智能知识检索系统 【免费下载链接】fast-graphrag RAG that intelligently adapts to your use case, data, and queries 项目地址: https://gitcode.com/gh_mirrors/fa/fast-graphrag Fast GraphRAG 是一个革命性的智能…

作者头像 李华
网站建设 2026/5/22 13:10:54

安装网络共享打印机HP1020和epsonLQ590出现0x0000011b错误如何解决?

一台WINDOWS10家庭版的电脑共享了一台惠普HP的激光打印机出来 ,给办公室的其它同事连网使用,只要是WINDOWS7的电脑的同事都能通过网络访问连接安装的方式来进行文件的打印操作,有几台WINDOWS10和WINDOWS11的电脑就是安装不上,在安装上提示windows无法连接到打印机,操作失败…

作者头像 李华
网站建设 2026/5/28 17:29:22

3步搞定Go版本管理:从环境混乱到高效开发的终极指南

3步搞定Go版本管理&#xff1a;从环境混乱到高效开发的终极指南 【免费下载链接】tools [mirror] Go Tools 项目地址: https://gitcode.com/gh_mirrors/too/tools 还在为Go项目版本冲突而苦恼&#xff1f;面对不同项目要求的Go版本&#xff0c;你是否经常手忙脚乱地切换…

作者头像 李华
网站建设 2026/5/28 13:37:53

从零开始掌握Dream-Textures:Blender中的AI材质革命

从零开始掌握Dream-Textures&#xff1a;Blender中的AI材质革命 【免费下载链接】dream-textures Stable Diffusion built-in to Blender 项目地址: https://gitcode.com/gh_mirrors/dr/dream-textures 还在为寻找合适的材质纹理而烦恼吗&#xff1f;Dream-Textures将St…

作者头像 李华