活文档标准 — 最后更新于 2024 年 9 月 12 日
如果一个字符串是 有效的 URL 字符串,但不是空字符串,则它是一个 有效的非空 URL。
如果一个字符串在 剥离前导和尾随 ASCII 空白 后,它是一个 有效的 URL 字符串,则它是一个 有效的 URL,可能被空格包围。
如果一个字符串在 剥离前导和尾随 ASCII 空白 后,它是一个 有效的非空 URL,则它是一个 有效的非空 URL,可能被空格包围。
本规范将 URL about:legacy-compat
定义为一个保留的,但不可解析的,about:
URL,用于在 DOCTYPE 中,在需要与 XML 工具兼容的 HTML 文档 中使用。 [ABOUT]
本规范将 URL about:html-kind
定义为一个保留的,但不可解析的,about:
URL,它被用作媒体轨道类型的标识符。 [ABOUT]
本规范将 URL about:srcdoc
定义为一个保留的,但不可解析的,about:
URL,它被用作 iframe
srcdoc
文档 的 URL。 [ABOUT]
一个 Document
对象 document 的 回退基础 URL 是通过执行以下步骤获得的 URL 记录
如果 document 是 一个 iframe
srcdoc
文档,则
断言:document 的 about 基础 URL 非空。
返回 document 的 about 基础 URL。
如果 document 的 URL 匹配 about:blank
且 document 的 about 基础 URL 非空,则返回 document 的 about 基础 URL。
返回 document 的 URL。
一个 Document
对象的 文档基础 URL 是通过执行以下步骤获得的 URL 记录
一个 URL 匹配 about:blank
,如果它的 方案 是“about
”,它的 路径 包含一个字符串“blank
”,它的 用户名 和 密码 是空字符串,并且它的 主机 为空。
这样的 URL 的 查询 和 片段 可以是非空的。例如,通过 解析“about:blank?foo#bar
” 创建的 URL 记录 匹配 about:blank
。
一个 URL 匹配 about:srcdoc
,如果它的 方案 是“about
”,它的 路径 包含一个字符串“srcdoc
”,它的 查询 为空,它的 用户名 和 密码 是空字符串,并且它的 主机 为空。
之所以 匹配 about:srcdoc
确保 URL 的 查询 为空,是因为不可能创建一个 iframe
srcdoc
文档,它的 URL 具有非空的 查询,这与 Document
不同,Document
的 URL 匹配 about:blank
。换句话说,所有 URL 中,匹配 about:srcdoc
的 URL 仅在其 片段 上有所不同。
解析 URL 是将一个字符串转换为它表示的 URL 记录 的过程。虽然此过程是在 URL 中定义的,但 HTML 标准定义了一些包装器来抽象基础 URL 和编码。 [URL]
大多数新 API 都是使用 解析 URL。较旧的 API 和 HTML 元素可能需要使用 编码解析 URL。当需要自定义基础 URL 或不需要基础 URL 时,当然也可以直接使用 URL 解析器。
要 解析 URL,给定一个字符串 url,相对于一个 Document
对象或 环境设置对象 environment,执行以下步骤。它们返回失败或一个 URL。
如果 environment 是一个 Document
对象,则将 baseURL 设置为 environment 的 基础 URL;否则,将其设置为 environment 的 API 基础 URL。
返回将 URL 解析器 应用于 url,并使用 baseURL 的结果。
要 编码解析 URL,给定一个字符串 url,相对于一个 Document
对象或 环境设置对象 environment,执行以下步骤。它们返回失败或一个 URL。
将 encoding 设置为 UTF-8。
如果 environment 是一个 Document
对象,则将 encoding 设置为 environment 的 字符编码。
否则,如果 environment 的 相关全局对象 是一个 Window
对象,则将 encoding 设置为 environment 的 相关全局对象 的 关联的 Document
的 字符编码。
如果 environment 是一个 Document
对象,则将 baseURL 设置为 environment 的 基础 URL;否则,将其设置为 environment 的 API 基础 URL。
返回将 URL 解析器 应用于 url,并使用 baseURL 和 encoding 的结果。
为了编码、解析和序列化一个 URL,给定一个字符串 url,相对于一个 Document
对象或一个 环境设置对象 environment,执行以下步骤。这些步骤将返回失败或一个字符串。
设 url 为 编码解析一个 URL 的结果,给定 url,相对于 environment。
如果 url 是失败,则返回失败。
返回将 URL 序列化器 应用于 url 的结果。
当文档的 文档基本 URL 发生更改时,该文档中的所有元素都会 受到基本 URL 更改的影响。
以下是 基本 URL 更改步骤,当元素 受到基本 URL 更改的影响(如 DOM 所定义)时,这些步骤将运行。
如果超链接标识的 URL 正在显示给用户,或者从该 URL 衍生的任何数据正在影响显示,则 href
属性的值应 重新解析,相对于元素的 节点文档,并相应地更新 UI。
例如,CSS :link
/:visited
伪类 可能受到影响。
如果超链接具有 ping
属性,并且其 URL(s) 正在显示给用户,则 ping
属性的标记应 重新解析,相对于元素的 节点文档,并相应地更新 UI。
q
、blockquote
、ins
或 del
元素,并且具有 cite
属性如果 cite
属性标识的 URL 正在显示给用户,或者从该 URL 衍生的任何数据正在影响显示,则 cite
属性的值应 重新解析,相对于元素的 节点文档,并相应地更新 UI。
该元素不会直接受到影响。
例如,更改基本 URL 不会影响 img
元素显示的图像,尽管随后从脚本访问 src
IDL 属性将返回一个新的 绝对 URL,该 URL 可能不再对应于正在显示的图像。
一个 响应,其 类型 为 "basic
"、"cors
" 或 "default
",则为 CORS 同源。 [FETCH]
一个 响应,其 类型 为 "opaque
" 或 "opaqueredirect
",则为 CORS 跨源。
一个 响应 的 不安全响应 是其 内部响应(如果存在),否则是该 响应 本身。
为了 创建一个潜在的 CORS 请求,给定一个 url、destination、corsAttributeState 和一个可选的 同源回退标志,执行以下步骤
如果 corsAttributeState 是 无 CORS,则设 mode 为 "no-cors
",否则设为 "cors
"。
如果 同源回退标志 已设置,并且 mode 为 "no-cors
",则将 mode 设置为 "same-origin
"。
设 credentialsMode 为 "include
"。
如果 corsAttributeState 是 匿名,则将 credentialsMode 设置为 "same-origin
"。
设 request 为一个新的 请求,其 URL 为 url,目标 为 destination,模式 为 mode,凭据模式 为 credentialsMode,并且其 使用 URL 凭据标志 已设置。
必须以与 MIME 嗅探 的要求一致的方式获取和解释资源的 Content-Type 元数据。 [MIMESNIFF]
必须以与 MIME 嗅探 中给出的要求一致的方式找到资源的 计算出的 MIME 类型。 [MIMESNIFF]
在 MIME 嗅探 中还定义了 专门用于嗅探图像的规则、用于区分资源是文本还是二进制的规则 和 专门用于嗅探音频和视频的规则。这些规则返回一个 MIME 类型 作为其结果。 [MIMESNIFF]
必须严格遵循 MIME 嗅探 中的规则。当用户代理使用与服务器预期的不同的内容类型检测启发式方法时,可能会出现安全问题。有关更多详细信息,请参阅 MIME 嗅探。 [MIMESNIFF]
meta
元素中提取字符编码给定一个字符串 s,从 meta
元素中提取字符编码的算法 如下所示。它要么返回一个字符编码,要么不返回任何内容。
设 position 为 s 中的一个指针,最初指向字符串的开头。
循环:查找 s 中 position 之后的前七个字符,它们与单词 "charset
" 的 ASCII 不区分大小写 匹配。如果没有找到这样的匹配,则不返回任何内容。
跳过紧跟在单词 "charset
" 之后的任何 ASCII 空格(可能不存在)。
如果下一个字符不是 U+003D 等号 (=),则将 position 移动到该下一个字符之前,并跳回到标记为 循环 的步骤。
跳过紧跟在等号之后的任何 ASCII 空格(可能不存在)。
按以下方式处理下一个字符
此算法不同于 HTTP 规范中的算法(例如,HTTP 不允许使用单引号,并且需要支持此算法不支持的反斜杠转义机制)。虽然此算法用于在历史上与 HTTP 相关的上下文中,但实现所支持的语法在一段时间之前就发生了分歧。 [HTTP]
所有当前引擎都支持。
一个 CORS 设置属性 是一个 枚举属性,包含以下关键字和状态
关键字 | 状态 | 简要描述 |
---|---|---|
anonymous
| 匿名 | 对该元素的 请求 将将其 模式 设置为 "cors ",并将 凭据模式 设置为 "same-origin "。 |
(空字符串) | ||
use-credentials
| 使用凭据 | 对该元素的 请求 将将其 模式 设置为 "cors ",并将 凭据模式 设置为 "include "。 |
该属性的 缺失值默认值 是 无 CORS 状态,其 无效值默认值 是 匿名 状态。为了 反射 的目的,匿名 状态的 规范关键字 是 anonymous
关键字。
大多数由 CORS 设置属性 控制的获取将通过 创建潜在 CORS 请求 算法进行。
对于更现代的功能,其中请求的 模式 始终为 "cors
",某些 CORS 设置属性 已被重新利用,具有稍微不同的含义,其中它们只影响 请求 的 凭据模式。为了执行这种转换,我们定义了给定 CORS 设置属性 的 CORS 设置属性凭据模式,通过切换属性的状态来确定
same-origin
"include
"一个 引用者策略属性 是一个 枚举属性。每个 引用者策略(包括空字符串)都是此属性的关键字,映射到相同名称的状态。
该属性的 缺失值默认值 和 无效值默认值 都是空字符串状态。
这些状态对各种 获取 处理模型的影响在本文档、获取 和 引用者策略 中进行了更详细的定义。 [FETCH] [REFERRERPOLICY]
多个信号可以促成对给定 获取 使用哪种处理模型;引用者策略属性 只是其中之一。一般来说,这些信号的处理顺序如下
首先,noreferrer
链接类型的存在;
然后,引用者策略属性 的值;
最后,`Referrer-Policy
` HTTP 头部。
所有当前引擎都支持。
一个 nonce
内容属性表示一个加密随机数(“一次性使用数字”),它可以被 内容安全策略 用于确定是否允许给定的获取继续。该值是文本。 [CSP]
具有 nonce
内容属性的元素通过从内容属性中获取值,将其移动到名为 [[CryptographicNonce]] 的内部插槽中,通过 HTMLOrSVGElement
接口混合将其公开给脚本,并将内容属性设置为空字符串,从而确保加密随机数仅公开给脚本(而不是公开给 CSS 属性选择器等旁路)。除非另有说明,否则插槽的值为空字符串。
element.nonce
返回为 element 的加密随机数设置的值。如果未使用 setter,则这将是最初在 nonce
内容属性中找到的值。
element.nonce = value
更新 element 的加密随机数的值。
在获取时,nonce
IDL 属性必须返回此元素的 [[CryptographicNonce]] 的值;在设置时,将此元素的 [[CryptographicNonce]] 设置为给定的值。
请注意,nonce
IDL 属性的 setter 不会更新相应的内容属性。这以及下面在元素 变为浏览上下文连接 时将 nonce
内容属性设置为空字符串,旨在防止通过可以轻松读取内容属性的机制(例如选择器)泄露随机数的值。在 问题 #2369 中了解有关此行为的更多信息,其中引入了此行为。
如果 element 不 包含 HTMLOrSVGElement
,则返回。
如果 localName 不是 nonce
或 namespace 不是 null,则返回。
如果 value 为 null,则将 element 的 [[CryptographicNonce]] 设置为空字符串。
否则,将 element 的 [[CryptographicNonce]] 设置为 value。
每当包含 HTMLOrSVGElement
的元素 包含 变为浏览上下文连接 时,用户代理必须在 element 上执行以下步骤
如果 CSP list 包含一个头部传送的内容安全策略,并且 element 具有 nonce
内容属性 attr,其值不是空字符串,则
令 nonce 为 element 的 [[CryptographicNonce]]。
将 element 的 [[CryptographicNonce]] 设置为 nonce。
如果 element 的 [[CryptographicNonce]] 没有被恢复,那么此时它将为空字符串。
包含 HTMLOrSVGElement
元素的 克隆步骤 必须将 [[CryptographicNonce]] 插槽设置为副本上的值,该值与被克隆元素上的插槽值相同。
所有当前引擎都支持。
一个 延迟加载属性 是一个 枚举属性,包含以下关键字和状态
关键字 | 状态 | 简要描述 |
---|---|---|
lazy
| 延迟 | 用于延迟获取资源,直到满足某些条件。 |
eager
| 立即 | 用于立即获取资源;默认状态。 |
该属性指示用户代理立即获取资源,或者根据属性的当前状态,推迟获取资源,直到满足与该元素相关的某些条件。
该属性的 缺失值默认值 和 无效值默认值 均为 Eager 状态。
给定元素 element 的 将延迟加载元素步骤 如下
如果 脚本被禁用 用于 element,则返回 false。
这是一个反跟踪措施,因为如果用户代理在脚本被禁用时支持延迟加载,则站点仍然可以通过在页面标记中战略性地放置图像来跟踪用户的近似滚动位置,这样服务器可以跟踪请求了多少图像以及何时请求。
返回 false。
每个 img
和 iframe
元素都具有关联的 延迟加载恢复步骤,最初为 null。
对于 img
和 iframe
元素,这些元素 将延迟加载,这些步骤从 延迟加载交叉观察器 的回调或当它们的 延迟加载属性 设置为 Eager 状态时运行。这将导致元素继续加载。
每个 Document
都具有一个 延迟加载交叉观察器,最初设置为 null,但可以设置为 IntersectionObserver
实例。
要 开始交叉观察延迟加载元素 element,请运行以下步骤
令 doc 为 element 的 节点文档。
如果 doc 的 延迟加载交叉观察器 为 null,则将其设置为新的 IntersectionObserver
实例,初始化如下
目的是使用 IntersectionObserver
构造函数的原始值。但是,我们被迫在此规范中使用 JavaScript 公开的构造函数,直到 Intersection Observer 公开用于规范的低级钩子。请参阅 bug w3c/IntersectionObserver#464,它跟踪此问题。 [INTERSECTIONOBSERVER]
callback 是这些步骤,其参数为 entries 和 observer
对于 entries 中的每个 entry 使用不会触发开发人员可修改的数组访问器或迭代钩子的迭代方法
令 resumptionSteps 为 null。
如果 entry.isIntersecting
为 true,则将 resumptionSteps 设置为 entry.target
的 延迟加载恢复步骤。
如果 resumptionSteps 为 null,则返回。
停止交叉观察延迟加载元素 用于 entry.target
。
调用 resumptionSteps。
目的是使用 isIntersecting
和 target
获取器的原始值。请参阅 w3c/IntersectionObserver#464。 [INTERSECTIONOBSERVER]
options 是一个 IntersectionObserverInit
字典,包含以下字典成员:«[ "scrollMargin
" → 延迟加载滚动边距 ]»
这允许在滚动期间获取图像,即使图像尚未(但即将)与视窗相交。
延迟加载滚动边距 建议暗示对该值的动态更改,但 IntersectionObserver
API 不支持更改滚动边距。请参阅问题 w3c/IntersectionObserver#428。
调用 doc 的 延迟加载交叉观察器 的 observe
方法,并将 element 作为参数。
目的是使用 observe
方法的原始值。请参阅 w3c/IntersectionObserver#464。 [INTERSECTIONOBSERVER]
要 停止交叉观察延迟加载元素 element,请运行以下步骤
令 doc 为 element 的 节点文档。
调用 doc 的 延迟加载交叉观察器 的 unobserve
方法,并将 element 作为参数。
目的是使用 unobserve
方法的原始值。请参阅 w3c/IntersectionObserver#464。 [INTERSECTIONOBSERVER]
延迟加载滚动边距 是一个 实现定义 值,但需要考虑以下建议
设置一个最小值,该最小值最常导致资源在正常使用模式下在给定设备上与视窗相交之前加载。
典型的滚动速度:对于具有更快典型滚动速度的设备,增加该值。
当前滚动速度或动量:UA 可以尝试预测滚动可能停止的位置,并相应地调整该值。
网络质量:对于慢速或高延迟连接,增加该值。
用户偏好会影响该值。
重要的是 为了隐私,延迟加载滚动边距 不应泄漏额外信息。例如,当前设备上的典型滚动速度可能不精确,因此不会引入新的指纹向量。
一个 阻塞属性 明确指示某些操作应在获取外部资源时被阻塞。可以阻塞的操作由 可能的阻塞令牌 表示,它们是以下表格中列出的字符串
可能的阻塞令牌 | 描述 |
---|---|
"render " | 该元素 可能阻塞渲染。 |
将来,可能会有更多 可能的阻塞令牌。
一个 阻塞属性 必须具有一个值为 无序的唯一空格分隔令牌集,每个令牌都是 可能的阻塞令牌。一个 阻塞属性 的 支持的令牌 是 可能的阻塞令牌。任何元素最多只能有一个 阻塞属性。
元素 el 的 阻塞令牌集 是以下步骤的结果
令 value 为 el 的 阻塞属性 的值,如果不存在此类属性,则为空字符串。
将 value 设置为 value,转换为 ASCII 小写。
令 rawTokens 为 将 value 按 ASCII 空格分隔 的结果。
返回一个包含 rawTokens 中元素的集合,这些元素是 可能的阻塞令牌。
如果元素的 阻塞令牌集 包含 "render
",或者如果它是 隐式可能阻塞渲染(将在各个元素中定义),则该元素为 可能阻塞渲染。默认情况下,元素不是 隐式可能阻塞渲染。
一个 获取优先级属性 是一个 枚举属性,具有以下关键字和状态
关键字 | 状态 | 简要描述 |
---|---|---|
high
| high | 相对于具有相同 目标 的其他资源,信号指示一个高优先级 获取。 |
low
| low | 相对于具有相同目标的其他资源,指示一个低优先级的获取。 |
auto
| auto | 相对于具有相同目标的其他资源,指示自动确定获取优先级。 |