*HTML `<script>` 标签中的核心属性解析:掌控脚本加载与执行的艺术
HTML <script>
标签中的核心属性:掌控脚本加载与执行的艺术
在网页开发中,<script>
标签是 JavaScript 的“入口”。它不仅决定了脚本如何加载和执行,还深刻影响着页面性能、安全性和跨域策略。本文将深入解析 <script>
标签中常见的 8 个核心属性,帮助你更好地掌握前端开发中的关键细节。
1. src
:脚本的来源地址
src
是 <script>
标签最基础的属性,用于指定外部 JavaScript 文件的路径。当浏览器遇到带有 src
的 <script>
标签时,会暂停 HTML 解析,加载并执行外部脚本。
<script src="main.js"></script>
关键点:
- 内联脚本(即直接写在
<script>
标签内的代码)会被忽略,因为src
优先级更高。 - 外部脚本的加载和执行会阻塞页面渲染(除非使用
async
或defer
)。
2. type
:定义脚本的类型
type
属性用于声明脚本的 MIME 类型。在 HTML5 中,浏览器默认将 <script>
标签内的内容视为 text/javascript
,因此通常可以省略。但 type
的其他值(如 module
)具有特殊用途。
<!-- 普通脚本 -->
<script type="text/javascript">console.log("Hello, world!");</script><!-- ES6 模块 -->
<script type="module">import { greet } from './module.js';greet();
</script>
关键点:
type="module"
允许使用 ES6 模块语法(import
/export
),并自动启用严格模式。- 使用模块时,浏览器会优先处理模块脚本,即使未指定
defer
或async
。
3. async
:异步加载,立即执行
async
是一个布尔属性,表示脚本应异步加载。浏览器会在下载脚本的同时继续解析 HTML,一旦脚本下载完成,立即执行。此属性适用于独立脚本(不依赖 DOM 或其他脚本)。
<script src="analytics.js" async></script>
关键点:
- 不保证执行顺序:多个
async
脚本的执行顺序与它们在文档中的顺序无关。 - 不阻塞页面渲染:适合加载第三方统计脚本(如 Google Analytics)。
4. defer
:延迟加载,按顺序执行
defer
与 async
类似,但脚本会在 HTML 解析完成后,按照文档中的顺序依次执行。它适合需要操作 DOM 或依赖其他脚本的场景。
<script src="init.js" defer></script>
关键点:
- 保证执行顺序:多个
defer
脚本会按出现顺序执行。 - 在
DOMContentLoaded
事件前执行:确保脚本在页面完全解析后运行。
5. charset
:定义外部脚本的字符编码
charset
用于指定外部脚本文件的字符集。现代浏览器默认使用 UTF-8 编码,因此该属性在多数情况下可忽略。
<script src="script.js" charset="UTF-8"></script>
关键点:
- 仅在脚本文件使用非 UTF-8 编码时需要显式声明。
- 现代开发中几乎不再需要手动设置此属性。
6. crossorigin
:跨域资源共享(CORS)控制
crossorigin
用于配置跨域请求的 CORS 策略,支持两种值:
anonymous
:不发送用户凭证(如 Cookie)。use-credentials
:发送用户凭证,需服务器配合设置Access-Control-Allow-Credentials
。
<script src="https://cdn.example.com/script.js" crossorigin="anonymous"></script>
关键点:
- 与
integrity
配合使用时,确保跨域资源的安全性。 - 常用于从 CDN 加载脚本或字体资源。
7. integrity
:子资源完整性校验
integrity
通过加密哈希值验证外部脚本是否被篡改。如果资源的哈希值与 integrity
指定的值不匹配,浏览器会拒绝执行该脚本。
<script src="https://cdn.example.com/script.js"integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"crossorigin="anonymous"></script>
关键点:
- 必须与
crossorigin
一起使用。 - 防止 CDN 资源被恶意替换,保障安全性。
8. language
:已废弃的属性
language
是早期 HTML 中用于指定脚本语言的属性(如 JavaScript
或 VBScript
)。HTML5 已弃用此属性,推荐使用 type
替代。
<!-- 不推荐 -->
<script language="JavaScript">alert("Hello");</script>
关键点:
- 所有现代浏览器均忽略此属性。
- 仅在维护遗留代码时可能遇到。
总结:合理使用属性,优化网页性能与安全
属性 | 用途 | 是否推荐 |
---|---|---|
src | 加载外部脚本 | ✅ |
type | 定义脚本类型(如模块) | ✅ |
async | 异步加载脚本(不保证顺序) | ✅ |
defer | 延迟加载脚本(按顺序执行) | ✅ |
charset | 指定脚本字符编码(现代浏览器默认 UTF-8) | ❌ |
crossorigin | 配置跨域请求策略 | ✅ |
integrity | 验证资源完整性,防止篡改 | ✅ |
language | 已废弃,推荐使用 type | ❌ |
实践建议:
- 对于独立脚本(如统计代码),使用
async
避免阻塞页面。 - 对于依赖 DOM 或其他脚本的代码,使用
defer
保证执行顺序。 - 使用
type="module"
开发模块化应用,提升代码可维护性。 - 从 CDN 加载资源时,始终搭配
crossorigin
和integrity
以确保安全。
通过灵活运用这些属性,你可以更高效地管理 JavaScript 的加载与执行,从而提升网页性能、增强安全性,并适应现代开发的最佳实践。下次编写 HTML 时,不妨多留意这些“小细节”,它们可能是优化用户体验的关键!
相关文章:
*HTML `<script>` 标签中的核心属性解析:掌控脚本加载与执行的艺术
HTML <script> 标签中的核心属性:掌控脚本加载与执行的艺术 在网页开发中,<script> 标签是 JavaScript 的“入口”。它不仅决定了脚本如何加载和执行,还深刻影响着页面性能、安全性和跨域策略。本文将深入解析 <script> 标…...

聊一聊接口测试如何设计有效的错误响应测试用例
目录 一、 覆盖常见的错误场景 a. 输入验证错误 b. 认证与权限错误 c. 资源操作错误 d. 业务逻辑错误 e. 服务端错误 二、设计测试用例的关键原则 a. 明确的错误信息 b. 正确的 HTTP 状态码 c. 幂等性处理 d. 安全性与敏感信息 三、测试用例设计模板 四、工具与自…...
记忆上传与自我同一性的哲学-技术综合分析
记忆上传与自我同一性的哲学-技术综合分析 在2025年的科技前沿,记忆上传技术已取得突破性进展,但其引发的"自我同一性"问题远比技术实现更为复杂。当记忆被上传至云端,所形成的是真实的自我延续,还是仅仅是一个数据的副…...
人工智能工程师学习路线总结(下)
目录 人工智能工程师学习路线总结(下) 十、深度学习框架进阶 (一)TensorFlow分布式训练 (二)PyTorch模型优化 十一、自然语言处理(NLP)进阶 (一)Transf…...
Vue:axios(POST请求)
发送 POST 请求 基本用法 axios.post(/api/login, {username: lcyyyy,password: 123456 }) .then(response > {console.log(请求成功:, response.data); }) .catch(error > {console.error(请求失败:, error); });在 Vue 组件中使用 export default {methods: {async …...
企业级调度器LVS (面试版)
1. 什么是 LVS?有什么作⽤? LVS ( Linux Virtual Server )是⼀个基于 Linux 内核实现的⾼性能、可扩展和可靠的负载均衡。它将多个服务器组成⼀个⾼可⽤、⾼性能和⾼可靠的虚拟服务器集群,通过将客户端的请求转发到不同的后端服务器,实现负载均衡和⾼可⽤性。 2.什么是 …...

从OTA双雄「共舞」,透视旅游持续繁荣背后的结构性跃迁
2025年,中国旅游市场仍在持续复苏中。 文化和旅游部发布的国内出游数据显示,2025年一季度,国内出游人次17.94亿,比上年同期增加3.75亿,同比增长26.4%;国内居民出游总花费1.80万亿元,比上年同期…...

华为OD机试真题——虚拟理财游戏(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
2025 A卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…...
Vue-01(Vue CLI创建项目以及文件配置说明)
了解 Vue CLI 及其功能 Vue CLI 是搭建、构建和管理 Vue.js 项目的标准工具。它通过提供一致的项目结构、处理复杂的构建配置以及通过插件提供一组丰富的功能来简化开发工作流程。了解 Vue CLI 对于任何 Vue.js 开发人员来说都至关重要,因为它可以显着提高生产力并…...

华为云Flexus+DeepSeek征文 | DeepSeek-V3/R1商用服务开通体验全流程及使用评测
作者简介 我是摘星,一名专注于云计算和AI技术的开发者。本次通过华为云MaaS平台体验DeepSeek系列模型,将实际使用经验分享给大家,希望能帮助开发者快速掌握华为云AI服务的核心能力。 目录 1. 前言 2. 开通DeepSeek-V3/R1商用服务 2.1 准…...
redis列表类型
练习命令使用,具体如下: lpush llen lrange lpoprpush lindex lset rpop linsert LPUSH命令用来向列表左边增加元素,返回值表示增加元素后列表的长度 127.0.0.1:6379> lpush letter A B C (integer) 3 127.0.0.1:6379> type letter …...

人工智能数学基础实验(一):智能推荐系统实战
一、实验目的 本次实验旨在通过构建用户相似度矩阵和实现个性化推荐,帮助我们直观理解推荐系统的核心原理及其背后的数学基础。具体目标如下: 运用 Python 计算用户间的评分相似度,掌握余弦相似度等数学工具在衡量用户偏好中的应用ÿ…...

uni-app学习笔记十二-vue3中组件传值(对象传值)
一.单对象传值 父组件定义对象的值 <template><view><UserInfo :obj"userinfo"></UserInfo></view> </template><script setup>import {ref} from "vue"const userinfo ref({name:"蛛儿",avatar:&…...

Vue.js教学第十四章:Vuex模块化,打造高效大型应用状态管理
Vuex(二):深入剖析 Vuex 模块化与高级应用 在大型 Vue 应用开发中,随着应用功能的不断扩展和复杂度的增加,状态管理的难度也随之上升。Vuex 作为 Vue.js 的官方状态管理库,提供了模块化功能,使得我们可以将状态管理逻辑拆分成多个模块,从而提高 Vuex 的可维护性和可读…...
Ubuntu/Linux 服务器上调整系统时间(日期和时间)
在 Ubuntu/Linux 服务器上调整系统时间(日期和时间)可以通过以下命令实现,具体分为 手动设置 和 自动同步(NTP)两种方式: 1. 查看当前系统时间 date或查看详细时区信息: timedatectl2. 手动设…...

win11 禁用/恢复 内置笔记本键盘(保证管用)
文章目录 禁用启用 禁用 1)按下 win x,点击 设备管理器 2)拔掉所有笔记本外设(一定要都拔掉,不然后面禁用设备会混淆),然后右键点击 键盘 > HID Keyboard Device 2)点击 更新…...

精度不够?光纤激光尺0.2ppm误差解锁微米级制造
当“精度焦虑”成为制造业的隐形门槛: 在半导体光刻中,1nm偏差可能导致整片晶圆报废; 在精密机床加工中,热变形让传统测量工具“失灵”…… “高精度、高稳定、抗干扰”——工业超精密制造的三大痛点,如何破局…...

Android 16系统源码_自由窗口(一)触发自由窗口模式
前言 从 Android 7.0 开始,Google 推出了一个名为“多窗口模式”的新功能,允许在设备屏幕上同时显示多个应用,多窗口模式允许多个应用同时共享同一屏幕,多窗口模式(Multi Window Supports)目前支持以下三种…...

sqli-labs第十八关——POST-UA注入
一:判断注入类型 先在用户名和密码框尝试判断,发现都得不到需要的回显 所以查看源码 可以发现username和password的输入后端都做了检查,没法直接注入 所以我们尝试uagent注入 UA注入: 没有url解码处理只识别原始空格ÿ…...
流式优先架构:彻底改变实时数据处理
近年来,随着现代组织的数据环境日趋复杂且高速流动,传统数据库系统已难以满足实时分析、物联网应用以及即时决策的需求。围绕批处理和静态数据模型设计的 RDBMS(关系型数据库管理系统)在架构层面缺乏实时处理能力,而流…...
WebSockets 在实时通信中的应用与优化
WebSockets 在实时通信中的应用与优化 1. 引言 在现代互联网应用中,实时通信 已成为许多场景的核心需求,如在线聊天、直播互动、在线游戏、实时数据推送等。而传统的 HTTP 轮询或长轮询方式往往伴随着 高延迟、资源浪费 等问题,使得开发者在…...
零基础教程:用 Docker + pgloader 将 MySQL 数据库迁移到 PostgreSQL
在日常开发中,可能会遇到从 MySQL 迁移到 PostgreSQL 的需求。你也许是: 正在准备从传统架构转向云原生;想使用 PostgreSQL 更强的事务与 JSON 支持;想统一团队数据库技术栈;纯粹为了尝试学习不同的数据库系统。别担心,无需手动写导出脚本,无需配置复杂工具,只需借助 D…...

mac上安装 Rust 开发环境
1.你可以按照提示在终端中执行以下命令(安全、官方支持): curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh然后按提示继续安装即可。 注意:安装过程中建议选择默认配置(按 1 即可)。 如果遇…...
解决RedisTemplate的json反序列泛型丢失问题
背景 在使用redisTemplate操作redis时我们针对对象的序列化通常将序列化成json存储到redis。一般如下配置 Bean ConditionalOnMissingBean public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory redisConnectionFactory, ObjectProvider<RedisT…...
【Elasticsearch】创建别名的几种方式
在 Elasticsearch 中,有以下几种创建索引别名的方式: 1. 在创建索引时指定别名 在创建索引时,可以直接在索引定义中指定别名。这种方式可以在索引创建的同时完成别名的绑定,避免后续的额外操作。 示例: json PUT /te…...
【JAVA】中文我该怎么排序?
📘 Java 中文排序教学文档(基于 Collator) 🧠 目录 概述Java 中字符串排序的默认行为为什么需要 Collator使用 Collator 进行中文排序升序 vs 降序排序自定义对象字段排序多字段排序示例总结对比表附录:完整代码示例 …...

《C 语言字符串操作从入门到实战(下篇):strncpy/strncat/strstr 等函数原理与实现》
目录 七. strncpy函数的使用与模拟实现 7.1 strncpy函数理解 7.2 strncpy函数使用示例 7.3 strncpy函数模拟实现 八. strncat函数的使用与模拟实现 8.1 strncat函数理解 8.2 strncat函数使用示例 8.3 strncat函数模拟实现 九. strncmp函数的使用 9.1 strncmp函数理…...

百度飞桨PaddleOCR 3.0开源发布 OCR精度跃升13%
百度飞桨 PaddleOCR 3.0 开源发布 2025 年 5 月 20 日,百度飞桨团队正式发布了 PaddleOCR 3.0 版本,并将其开源。这一新版本在文字识别精度、多语种支持、手写体识别以及高精度文档解析等方面取得了显著进展,进一步提升了 PaddleOCR 在 OCR …...

Xilinx 7Series\UltraScale 在线升级FLASH STARTUPE2和STARTUPE3使用
一、FPGA 在线升级 FPGA 在线升级FLASH时,一般是通过逻辑生成SPI接口操作FLASH,当然也可以通过其他SOC经FPGA操作FLASH,那么FPGA就要实现在启动后对FLASH的控制。 对于7Series FPGA,只有CCLK是专用引脚,SPI接口均为普…...

数字孪生驱动的离散制造智能升级:架构设计与工程实践
针对离散制造行业多品种、小批量的生产特性,本文提出一种基于数字孪生的智能制造解决方案。以某国家级智能制造试点示范项目为载体,构建"云-边-端"协同的数字孪生系统,实现设备综合效率(OEE)提升28.7%、订单…...