红宝书重读系列01:script元素、文档模式、<noscript>

时间记录:24.09.10-24.09.13

笔者之前已经读过几遍红宝书,但是发现之前所读有很多疏忽、遗漏、不深刻的地方,所以最近开始找出《JavaScript高级程序设计(第四版)》进行重读,并进行延伸方向的问题探讨和学习。
如有不正确之处,欢迎评论区讨论🥳

第二章 HTML中的JavaScript

1. <script>元素—将JS代码插入HTML的主要方法

对于这个老生常谈的元素,有以下几个属性需要格外注意:

  • async:可选。表示应立即开始下载脚本,但不能阻止其他页面动作(比如下载资源、等待其他脚本加载)。只对外部脚本文件有效。
  • defer:可选。表示脚本可以延迟到文档被完全解析和显示之后再执行。只对外部脚本文件有效(IE7之前版本对内部脚步也可以指定该属性)。
  • crossorigin:可选。配置相关请求对CORS设置。默认不使用CORS(跨源资源共享)。
  • src:可选。表示包含要执行的代码的外部文件。
  • integrity:可选。允许对比 接收到的资源签名 和 指定的加密签名 以验证子资源完整性。如果二者不匹配会报错,该脚本不会执行。

加载JS的其他方法-动态加载脚本:

可以通过JS使用DOM API,向DOM中动态添加script元素

let script = document.createElement('script');
script.src = 'example.js';
document.head.appendChild(script);

1.1. 面试常见问题:defer和async的区别是什么?

<!DOCTYPE html>
<html><head><title>Title</title><script defer src="example1.js"></script><script async src="example2.js"></script></head><body><!-- 页面内容在这里 --></body>
</html>

从改变脚本处理方式上看,async和defer属性都只适用于外部脚本,都会告诉浏览器立即开始下载,但延迟执行。

但是,HTML5规范要求有defer属性的脚本应该按照他们出现的顺序执行(但实际应用中,推迟执行的脚本不一定总会按顺序执行),而标记为async的脚本并不保证能按照它们出现的顺序执行。

细节问题探讨:

  • 对于defer属性来说,当浏览器下载完对应的脚本文件,会等到解析完HTML后再执行JS;对于async属性来说,当浏览器下载完对应的脚本文件,会立即中断浏览器解析HTML,执行JS。

  • defer属性在脚本执行时一定可以获取到HTML中已有的元素;async属性在脚本执行时没有确定的执行时机(谁先下载完执行谁),所以不一定能获取到HTML中已有的元素。

  • 如果一个脚本同时设置async和defer属性,浏览器会以async的特性加载脚本。(async优先级更高)

XHTML写法:

<!DOCTYPE html>
<html><head><title>Title</title><script defer=“defer” src="example1.js"></script><script async=“async” src="example2.js"></script></head><body><!-- 页面内容在这里 --></body>
</html>

1.2. 当行内脚本出现字符串’</script>'……

问题出现原因: 行内脚本

因此,当行内JacaScript代码中出现字符串’'时,浏览器会将其视作

<script>function sayJs() {console.log("</script>")}
</script>

解决方法: 使用转义字符- ‘ \ ’ (如代码所示)

1.3. 外部文件和行内代码的优先级,哪个更高?

通常认为的最佳实践是尽可能将JS代码放在外部文件中,

好处是:可维护性好、缓存-文件只需下载一次(页面加载速度会更快)、适应未来-预请求消耗降低。

如果一个文件中同时使用了 具有src属性的标签,浏览器只会下载并执行脚本文件,从而忽略行内代码。(外部文件优先级更高)

1.4. 使用外部文件时潜在的安全隐患…

<script>元素可以包含来自外部域的JS文件,这很强大,但同时也备受争议。

<script src="https://www.somewhere.com/file.js"></script>

如上例,浏览器在解析这个资源时,会向src属性指定的路径发送一个GET请求,已取得相应资源。

这个初始的请求不受浏览器同源策略限制,但返回并被执行的JS仍受限制。

来自外部域的代码会被当成它页面的一部分来解释和加载,通过这种策略,我们可以通过不同域分发JS。

但是,在引用来自外部域的JS代码时,可能会因为引用目标文件被替换导致安全风险,为了确保目标域可信,可以通过

1.5. 面试常见问题:<script>元素放在页面的哪个位置更好,为什么?

所有JavaScript引用都放在元素中的页面内容后面,这样一来,页面会在处理JavaScript代码之前完全渲染页面,浏览器显示空白页面的时间会变短,用户会感觉页面加载更快了。

<!DOCTYPE html>
<html><head><title>Title</title></head><body><!-- 页面内容 --><script defer="defer" src="example1.js"></script><script defer="defer" src="example2.js"></script></body>
</html>

2. 文档模式-标准与混杂

混杂模式在所有浏览器中以省略文档开头的doctype声明作为开头

标准模式通过以下几种文档声明类型开启:

<!-- HTML 4.01 Strict -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<!-- HTML5 -->
<!DOCTYPE html>

2.1. 面试常见问题:HTML文件的第一行代码是什么意思?有什么用?

HTML文件的第一行代码实际上是将文档模式切换为了标准模式。

标准模式:让IE具有兼容标准的行为

混杂模式:让IE像IE5一样(支持一些非标准的特性)

标准模式和混杂模式的主要区别只体现在通过CSS渲染的内容方面,但对JavaScript也有一些关联影响(被称作副作用)。

3. <noscript> — 页面优雅降级的方案

元素中可以包含除了<script>标签外的、可以出现在中的HTML元素。在浏览器不支持脚本/浏览器对脚本的支持被关闭时触发。

<!DOCTYPE html>
<html><head><title>Title</title><script defer="defer" src="example1.js"></script><script defer="defer" src="example2.js"></script></head><body><noscript><p>this page need a JavaScript-enabled browser.</p></noscript></body>
</html>

注意:如果浏览器支持并启用脚本,则元素中的任何内容都不会被渲染

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/425390.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

滑坡落石检测数据集

滑坡落石检测数据集 1500张 滑坡落石 带标注 voc yolo 项目背景&#xff1a; 滑坡落石是地质灾害中的一种常见现象&#xff0c;它对人类生活和基础设施构成了严重威胁。及时准确地检测滑坡落石对于预防灾害发生、减少损失至关重要。传统的检测方法往往依赖于人工巡查&#xff…

蓝桥杯—STM32G431RBT6按键的多方式使用(包含软件消抖方法精讲)从原理层面到实际应用(一)

新建工程教程见http://t.csdnimg.cn/JySLg 点亮LED教程见http://t.csdnimg.cn/Urlj5 末尾含所有代码 目录 按键原理图 一、按键使用需要解决的问题 1.抖动 1.什么是抖动 2.抖动类型 3.如何去消除抖动 FIRST.延时函数消抖&#xff08;缺点&#xff1a;浪费CPU资源&#xff…

transformer模型进行英译汉,汉译英

上面是在测试集上的表现 下面是在训练集上的表现 上面是在训练集上的评估效果 这是在测试集上的评估效果,模型是transformer模型,模型应该没问题,以上的是一个源序列没加结束符和加了结束符的情况。 transformer源序列做遮挡填充的自注意力,这就让编码器的输出中每个token的语…

第312题|二重积分求旋转体体积(二)|武忠祥老师每日一题

解题思路&#xff1a;先画出图像&#xff0c;再利用旋转体体积计算公式进行解题。 1. 旋转体体积计算公式&#xff1a; 2.点到直线计算公式&#xff1a; 有了上面两条知识储备之后我们开始计算。 第一步&#xff1a;先计算出点到直线的距离&#xff1a; ymx&#xff0c;y-mx…

web开发 之 HTML、CSS、JavaScript、以及JavaScript的高级框架Vue(学习版2)

一、前言 接下来就是来解决这些问题 二、 Ajax 1.ajax javscript是网页三剑客之一&#xff0c;空用来控制网页的行为的 xml是一种标记语言&#xff0c;是用来存储数据的 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-…

JVM字节码与局部变量表

文章目录 局部变量表javap字节码指令分类 指令指令数据类型前缀加载和存储指令加载常量算术指令其他指令 字节码示例说明 局部变量表 每个线程的帧栈是独立的&#xff0c;每个线程中的方法调用会产生栈帧&#xff0c;栈帧中保存着方法执行的信息&#xff0c;例如局部变量表。 …

单硬盘安装Win10和麒麟V10双系统指导建议

随着信创电脑的普及,国产操作系统也逐渐走进了大家的视野,许多人选择了国产操作系统来体验其开源、安全、高效的特性,而Windows系统也是大多数人习惯使用的操作系统。一台电脑上同时安装银河麒麟V10和Windiows10双系统也成为了非常常见的需求。那么,如何在一台电脑上安装银…

外网(公网)访问VMware workstation 虚拟机内web网站的配置方法---端口转发总是不成功的原因

问题背景&#xff1a;客户提供的服务器操作系统配置web程序时&#xff0c;总是显示莫名其妙的问题&#xff0c;发现是高版本操作系统的.net库已经对低版本.net库进行了大范围修订&#xff0c;导致在安全检测上、软件代码规范上更加苛刻&#xff0c;最终导致部署不成功。于是想到…

TS - tsconfig.json 和 tsconfig.node.json 的关系,如何在TS 中使用 JS 不报错

目录 1&#xff0c;前言2&#xff0c;二者关系2.1&#xff0c;使用 3&#xff0c;遇到的问题3.1&#xff0c;TS 中使用 JS 1&#xff0c;前言 通过 Vite 创建的 Vue3 TS 项目&#xff0c;根目录下会有 tsconfig.json 和 tsconfig.node.json 文件&#xff0c;并且存在引用关系…

【网络】TCP/IP 五层网络模型:数据链路层

文章目录 认识以太网mac 地址mac 地址和 IP 地址的区别 类型ARP 协议 MTU 日常开发主要是应用层&#xff0c;传输层和应用层密切交互&#xff0c;传输层用到的也不少。网络层以及再往下&#xff0c;日常开发就涉及到的非常少了 认识以太网 插网线的上网方式 80211 是无线 WiF…

指纹与指甲检测系统源码分享

指纹与指甲检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

[网络]TCP/IP协议 之 网络层IP协议(3)

文章目录 一. IP协议报头二. NAT机制三. IP地址管理的基本规则1. 网段划分2. 特殊的IP地址 四. IP路由选择 网络层主要做的事情: 1.路径规划(路由器选择) 2.地址管理 一. IP协议报头 1)4位版本 指定IP协议的版本, 4 > ipv4 , 6 > ipv6 2)4位首部长度 4位bit能表示0-15, …

Linux bash脚本本地开发环境(Git Bash)配置

参考资料 VSCode: Windows 下配置 VSCode运行shellVSCodeを使用したシェルスクリプトの開発環境作成 目录 一. 必备VSCode插件二. 插件配置说明2.1 Bash IDE2.2 Code Runner2.3 shell-format 一. 必备VSCode插件 Bash IDE 该插件为 Bash 脚本提供了一些实用的开发工具和功能&…

如何设置xshell关闭最后一个选项卡标签时不退出软件?

不知道你是否遇到这个问题&#xff0c;就是在使用xshell的时候&#xff0c;每次关闭最后一个选项卡标签的时候&#xff0c;xshell软件默认就退出了&#xff0c;好多次我都只是想要关闭&#xff0c;而非退出&#xff0c;所以该如何设置&#xff0c;才能到我们的预期的效果呢&…

人工智能GPT____豆包使用的一些初步探索步骤 体验不一样的工作

豆包工具是我使用比较频繁的一款软件&#xff0c;其集合了很多功能。对话 图像 AI搜索 伴读等等使用都非常不错。电脑端安装集合了很多功能。 官网直达&#xff1a;豆包 使用我的文案创作能力&#xff0c;您可以注意以下几个技巧&#xff1a; 明确需求&#xff1a; 尽可能具…

云计算和虚拟化技术 背诵

https://zhuanlan.zhihu.com/p/612215164 https://zhuanlan.zhihu.com/p/612215164 云计算是指把计算资源、存储资源、网络资源、应用软件等集合起来&#xff0c;采用虚拟化技术 &#xff0c;将这些资源池化&#xff0c;组成资源共享池&#xff0c;共享池即是“云”。 云计算…

supermap iclient3d for cesium中entity使用

目标将西南石油大学部分区域围起来&#xff0c;然后引个标签显示名称&#xff0c;最后弄个飞机绕学校飞&#xff08;这个时间有点晚了&#xff0c;明天弄) 围墙: wall:{positions:Cesium.Cartesian3.fromDegreesArrayHeights([104.173,30.822,500,104.178,30.837,500,104.19,3…

Qt-QPushButton按钮类控件(22)

目录 描述 使用 给按钮添加图片 给按钮添加快捷键 添加槽函数 添加快捷键 添加组合键 开启鼠标的连发功能 描述 经过上面的一些介绍&#xff0c;我们也尝试的使用过了这个控件&#xff0c;接下来我们就要详细介绍这些比较重要的控件了 使用 给按钮添加图片 我们创建…

局域网windows下使用Git

windows下如何使用局域网进行git部署 准备工作第一步 &#xff0c;ip设置设置远程电脑的ip设置&#xff0c;如果不会设置请点击[这里](https://blog.csdn.net/Black_Friend/article/details/142170705?spm1001.2014.3001.5501)设置本地电脑的ip&#xff1a;验证 第二步&#x…

下载chromedriver驱动

首先进入关于ChromeDriver最新下载地址&#xff1a;Chrome for Testing availability 进入之后找到与自己所匹配的&#xff0c;在浏览器中查看版本号&#xff0c;下载版本号需要一致。 下载即可&#xff0c;解压&#xff0c;找到 直接放在pycharm下即可 因为在环境变量中早已配…