1. 2 通用基础设施
    1. 2.1 术语
      1. 2.1.1 并行性
      2. 2.1.2 资源
      3. 2.1.3 XML 兼容性
      4. 2.1.4 DOM 树
      5. 2.1.5 脚本
      6. 2.1.6 插件
      7. 2.1.7 字符编码
      8. 2.1.8 符合性类别
      9. 2.1.9 依赖关系
      10. 2.1.10 可扩展性
      11. 2.1.11 与 XPath 和 XSLT 的交互
    2. 2.2 策略控制的功能

2 通用基础设施

本规范依赖于 Infra[INFRA]

2.1 术语

本规范同时引用了 HTML 和 XML 属性以及 IDL 属性,通常在同一上下文中。当不清楚指的是哪一种时,对于 HTML 和 XML 属性,它们被称为 内容属性,而对于 IDL 接口上定义的属性,则被称为 IDL 属性。类似地,“属性”一词既用于 JavaScript 对象属性,也用于 CSS 属性。当这些属性存在歧义时,分别限定为 对象属性CSS 属性

通常,当规范说明某个功能适用于 HTML 语法XML 语法 时,也包括另一种语法。当某个功能仅特定适用于两种语言中的一种时,会通过明确说明它不适用于另一种格式来指明,例如“对于 HTML,...(这并不适用于 XML)”。

本规范使用术语 文档 来指代任何使用 HTML 的情况,范围从简短的静态文档到包含丰富多媒体的长篇论文或报告,以及功能齐全的交互式应用程序。该术语用于指代 Document 对象及其后代 DOM 树,以及使用 HTML 语法XML 语法 的序列化字节流,具体取决于上下文。

在 DOM 结构的上下文中,术语 HTML 文档XML 文档 的使用方式如 DOM 中所定义,并具体指代 Document 对象可能处于的两种不同模式。 [DOM](此类用法始终超链接到其定义。)

在字节流的上下文中,“HTML 文档”指代标记为 text/html 的资源,而“XML 文档”指代标记为 XML MIME 类型 的资源。


为简单起见,术语如 显示呈现可见 有时可能用于指代文档呈现给用户的方式。这些术语并非暗示视觉媒介;必须认为它们以等效的方式适用于其他媒介。

2.1.1 并行性

运行步骤 并行 表示这些步骤要一个接一个地运行,与标准中的其他逻辑同时运行(例如,与 事件循环 同时运行)。本标准未定义实现此目的的精确机制,无论是分时协作式多任务处理、纤程、线程、进程、使用不同的超线程、内核、CPU、机器等。相比之下,要立即运行的操作必须中断当前正在运行的任务,运行自身,然后恢复先前正在运行的任务。

有关编写利用并行性的规范的指南,请参阅 从其他规范处理事件循环

为了避免在操作相同数据的不同 并行 算法之间出现竞争条件,可以使用 并行队列

一个 并行队列 表示一个必须串行运行的算法步骤队列。

一个 并行队列 具有一个 算法队列(一个 队列),最初为空。

要将步骤 入队并行队列,将算法步骤 入队并行队列算法队列

启动一个新的并行队列,请运行以下步骤

  1. parallelQueue 为一个新的 并行队列

  2. 运行以下步骤 并行

    1. 当为真时

      1. steps 为从 parallelQueue算法队列 出队 的结果。

      2. 如果 steps 不是空,则运行 steps

      3. 断言:运行 steps 未抛出异常,因为 并行 运行的步骤不允许抛出异常。

      实现不需要将此实现为一个持续运行的循环。标准中的算法易于理解,不一定非常适合电池续航时间或性能。

  3. 返回 parallelQueue

并行 运行的步骤本身可以 并行 运行其他步骤。例如,在 并行队列 内部,可以将一系列步骤与队列并行运行。

假设一个标准定义了 nameList(一个 列表),以及一个向 nameList 添加 name 的方法,除非 nameList 已经 包含 name,在这种情况下,它会拒绝。

以下解决方案存在竞争条件

  1. p 为在 相关领域 中创建的一个新的 Promise。

  2. 运行以下步骤 并行

    1. 如果 nameList 包含 name,则 在给定 相关全局对象DOM 操作任务源 上排队一个全局任务 以使用 TypeError 拒绝 p,并中止这些步骤。

    2. 执行一些可能很耗时的工作。

    3. 追加 namenameList

    4. 在给定 相关全局对象DOM 操作任务源 上排队一个全局任务 以使用 undefined 解析 p

  3. 返回 p

上述内容的两次调用可能同时运行,这意味着在步骤 2.1 中 name 不在 nameList 中,但它可能在步骤 2.3 运行之前被添加,这意味着 name 最终在 nameList 中出现两次。

并行队列解决了这个问题。标准将令 nameListQueue启动一个新的并行队列 的结果,然后

  1. p 为在 相关领域 中创建的一个新的 Promise。

  2. 将以下步骤入队nameListQueue

    1. 如果 nameList 包含 name,则 在给定 相关全局对象DOM 操作任务源 上排队一个全局任务 以使用 TypeError 拒绝 p,并中止这些步骤。

    2. 执行一些可能很耗时的工作。

    3. 追加 namenameList

    4. 在给定 相关全局对象DOM 操作任务源 上排队一个全局任务 以使用 undefined 解析 p

  3. 返回 p

这些步骤现在将入队,并且避免了竞争条件。

2.1.2 资源

当指代用户代理是否具有能够解码外部资源语义的实现时,规范使用术语 支持。如果实现能够处理该格式或类型的外部资源而不会忽略资源的关键方面,则称该格式或类型为支持。特定资源是否支持可能取决于正在使用的资源格式的功能。

例如,如果可以解码和渲染 PNG 图像的像素数据,则认为它处于受支持的格式中,即使在实现不知情的情况下,图像也包含动画数据。

如果使用的压缩格式不受支持,则 MPEG-4 视频文件将不被视为处于受支持的格式中,即使实现可以从文件的元数据中确定电影的尺寸。

某些规范,特别是 HTTP 规范,将表示称为本规范中的 资源[HTTP]

资源的关键子资源是指资源正确处理所必需的资源。哪些资源被视为关键资源,由定义资源格式的规范确定。

对于CSS 样式表,我们在此初步定义其关键子资源为通过@import规则导入的其他样式表,包括由其他导入的样式表间接导入的样式表。

此定义并非完全可互操作;此外,某些用户代理似乎将背景图像或网络字体等资源也视为关键子资源。理想情况下,CSS 工作组会对此进行定义;请参阅w3c/csswg-drafts 问题 #1088以跟踪这方面进展。

2.1.3 XML 兼容性

为了简化从 HTML 到 XML 的迁移,符合本规范的用户代理将 HTML 中的元素放置在http://www.w3.org/1999/xhtml命名空间中,至少在 DOM 和 CSS 的用途方面如此。“HTML 元素”一词指的是该命名空间中的任何元素,即使在 XML 文档中也是如此。

除非另有说明,否则本规范中定义或提及的所有元素均位于HTML 命名空间(“http://www.w3.org/1999/xhtml”)中,并且本规范中定义或提及的所有属性均无命名空间。

术语元素类型用于指代具有给定本地名称和命名空间的元素集。例如,button元素是元素类型为button的元素,这意味着它们具有本地名称“button”以及(如上所述隐式定义的)HTML 命名空间

如果属性名称与 XML 中定义的Name生成规则匹配,并且不包含 U+003A COLON 字符 (:),则称其为XML 兼容的。 [XML]

2.1.4 DOM 树

当说明某个元素或属性被忽略,或被视为其他值,或被处理为其他内容时,这仅指节点进入 DOM 后对其进行处理。用户代理在这种情况下的 DOM 必须保持不变。

仅当内容属性的新值与其先前值不同时,才称其更改了值;将属性设置为其已有的值不会更改它。

术语在用于属性值、Text节点或字符串时,表示文本的长度为零(即,甚至不包含控制字符或 U+0020 SPACE)。

HTML 元素可以具有特定的HTML 元素插入步骤HTML 元素连接后步骤HTML 元素移除步骤,所有这些步骤都针对元素的本地名称定义。

给定insertedNode的 HTML 标准的插入步骤定义如下

  1. 如果insertedNode是一个元素,其命名空间HTML 命名空间,并且本标准为insertedNode本地名称定义了HTML 元素插入步骤,则运行给定insertedNode的相应HTML 元素插入步骤

  2. 如果insertedNode与表单关联的元素与表单关联的元素的祖先,则

    1. 如果与表单关联的元素解析器插入标志已设置,则返回。

    2. 重置与表单关联的元素与表单关联的元素的表单所有者。

  3. 如果insertedNodeElement,并且不在HTML 解析器打开元素栈中,则给定insertedNode节点文档处理内部资源链接

给定insertedNode的 HTML 标准的连接后步骤定义如下

  1. 如果insertedNode是一个元素,其命名空间HTML 命名空间,并且本标准为insertedNode本地名称定义了HTML 元素连接后步骤,则运行给定insertedNode的相应HTML 元素连接后步骤

给定removedNodeoldParent的 HTML 标准的移除步骤定义如下

  1. documentremovedNode节点文档

  2. 如果document焦点区域removedNode,则将document焦点区域设置为document视口,并将document相关全局对象导航 API导航过程中焦点已更改设置为 false。

    不会执行取消焦点步骤聚焦步骤焦点更新步骤,因此不会触发blurchange事件。

  3. 如果removedNode是一个元素,其命名空间HTML 命名空间,并且本标准为removedNode本地名称定义了HTML 元素移除步骤,则运行给定removedNodeoldParent的相应HTML 元素移除步骤

  4. 如果removedNode与表单关联的元素与表单关联的元素的祖先,则

    1. 如果与表单关联的元素具有表单所有者,并且与表单关联的元素及其表单所有者不再位于同一中,则重置与表单关联的元素与表单关联的元素的表单所有者。

  5. 如果removedNodepopover属性不在无弹出窗口状态中,则运行给定removedNode、false、false 和 false 的隐藏弹出窗口算法

当使用其作为参数调用插入步骤并且它现在位于文档树中时,节点被插入文档。类似地,当使用其作为参数调用移除步骤并且它现在不再位于文档树中时,节点从文档中移除

当使用其作为参数调用插入步骤并且它现在已连接时,节点变为已连接。类似地,当使用其作为参数调用移除步骤并且它现在不再已连接时,节点变为已断开连接

当一个节点是浏览上下文连接的时,它必须是连接的,并且它的包含阴影的根浏览上下文不为 null。一个节点变为浏览上下文连接的时,当插入步骤以它作为参数被调用,并且它现在是浏览上下文连接的。一个节点变为浏览上下文断开连接的时,要么当移除步骤以它作为参数被调用,并且它现在不再是浏览上下文连接的,要么当它的包含阴影的根浏览上下文变为 null 时。

2.1.5 脚本

构造“一个 Foo 对象”,其中 Foo 实际上是一个接口,有时用于代替更准确的“一个实现了接口 Foo 的对象”。

当 IDL 属性的值被检索(例如,通过作者脚本)时,据说该属性正在获取;当为其分配新值时,据说该属性正在设置

如果说一个 DOM 对象是活动的,则该对象上的属性和方法必须操作实际的基础数据,而不是数据的快照。

2.1.6 插件

术语插件指的是用户代理使用的实现定义的内容处理程序集,这些处理程序可以参与用户代理对Document对象的渲染,但既不充当Document子可导航,也不向Document的 DOM 引入任何Node对象。

通常,此类内容处理程序由第三方提供,但用户代理也可以将内置内容处理程序指定为插件。

用户代理不得将类型text/plainapplication/octet-stream视为具有已注册的插件

插件的一个示例是 PDF 查看器,当用户导航到 PDF 文件时,它会在可导航中实例化。无论实现 PDF 查看器组件的方与实现用户代理本身的方是否相同,这都算作插件。但是,与用户代理分开启动的 PDF 查看器应用程序(而不是使用相同的界面)根据此定义不是插件。

本规范未定义与插件交互的机制,因为它预计是特定于用户代理和平台的。一些 UA 可能会选择支持诸如 Netscape Plugin API 之类的插件机制;其他 UA 可能会使用远程内容转换器或对某些类型提供内置支持。实际上,本规范根本不要求用户代理支持插件。 [NPAPI]

浏览器在与旨在用于插件的外部内容交互时应格外小心。当第三方软件以与用户代理本身相同的权限运行时,第三方软件中的漏洞会变得与用户代理中的漏洞一样危险。

(这是一个跟踪向量。) 由于不同的用户具有不同的插件集,这提供了一个跟踪向量,从而增加了用户被唯一识别的可能性,因此鼓励用户代理对每个用户都支持完全相同的插件集。

2.1.7 字符编码

字符编码,或在不产生歧义的情况下简称为编码,是在字节流和 Unicode 字符串之间转换的定义方式,如编码中所定义。一个编码具有编码名称和一个或多个编码标签,在编码标准中分别称为编码的名称标签[ENCODING]

2.1.8 一致性类别

本规范描述了用户代理(与实现者相关)和文档(与作者和作者工具实现者相关)的一致性标准。

符合规范的文档是指符合所有文档一致性标准的文档。为了提高可读性,一些一致性要求被表述为对作者的一致性要求;此类要求隐含地是对文档的要求:根据定义,假设所有文档都有作者。(在某些情况下,该作者本身可能是一个用户代理——此类用户代理受其他规则约束,如下所述。)

例如,如果一项要求指出“作者不得使用 foobar 元素”,则意味着文档不允许包含名为 foobar 的元素。

文档一致性要求和实现一致性要求之间没有隐含的关系。用户代理不能随意处理不符合规范的文档;本规范中描述的处理模型适用于实现,而不管输入文档的一致性如何。

用户代理分为几个(重叠的)类别,并具有不同的符合性要求。

Web 浏览器和其他交互式用户代理

支持XML 语法的 Web 浏览器必须按照本规范中所述处理在 XML 文档中找到的来自HTML 命名空间的元素和属性,以便用户可以与之交互,除非这些元素的语义已被其他规范覆盖。

一个符合规范的 Web 浏览器在找到 XML 文档中的script元素时,将执行该元素中包含的脚本。但是,如果该元素在 XSLT 中表达的转换中找到(假设用户代理也支持 XSLT),则处理器将改为将script元素视为构成转换的一部分的不透明元素。

支持HTML 语法的 Web 浏览器必须按照本规范中所述处理标有HTML MIME 类型的文档,以便用户可以与之交互。

支持脚本的用户代理还必须是本规范中 IDL 片段的符合规范的实现,如Web IDL中所述。 [WEBIDL]

除非另有明确说明,否则覆盖 HTML 元素语义的规范不会覆盖对表示这些元素的 DOM 对象的要求。例如,上面示例中的script元素仍然将实现HTMLScriptElement接口。

非交互式演示用户代理

纯粹为了呈现其非交互式版本的 HTML 和 XML 文档的用户代理必须遵守与 Web 浏览器相同的一致性标准,但它们免于与用户交互相关的要求。

非交互式演示用户代理的典型示例包括打印机(静态 UA)和顶置显示器(动态 UA)。预计大多数静态非交互式演示用户代理也将选择缺乏脚本支持

非交互式但动态的演示 UA 仍然会执行脚本,允许表单动态提交,等等。但是,由于当用户无法与文档交互时,“焦点”的概念无关紧要,因此 UA 不需要支持任何与焦点相关的 DOM API。

支持建议的默认渲染的视觉用户代理

用户代理(无论是否交互式)都可以被指定(可能作为用户选项)为支持本规范定义的建议的默认渲染。

这不是必需的。特别是,即使实现了建议的默认渲染的用户代理也鼓励提供覆盖此默认设置的设置,以改善用户的体验,例如更改颜色对比度、使用不同的焦点样式或以其他方式使体验更易于访问和使用。

被指定为支持建议的默认渲染的用户代理必须在指定为支持时,实现渲染部分中定义的规则,作为用户代理预期实现的行为。

没有脚本支持的用户代理

不支持脚本(或其脚本功能完全被禁用)的实现免于支持本规范中提到的事件和 DOM 接口。对于根据事件模型或 DOM 定义的本规范的各个部分,此类用户代理仍必须表现得好像支持事件和 DOM 一样。

脚本可以构成应用程序的组成部分。不支持脚本或脚本被禁用的 Web 浏览器可能无法完全传达作者的意图。

一致性检查器

一致性检查器必须验证文档是否符合本规范中描述的适用一致性标准。自动一致性检查器免于检测需要解释作者意图的错误(例如,如果blockquote元素的内容不是引用,则文档不符合规范;但在没有人工判断的情况下运行的一致性检查器不必检查blockquote元素是否仅包含引用材料)。

一致性检查器必须检查在没有浏览上下文(意味着没有运行脚本,并且解析器的脚本标志被禁用)的情况下解析时输入文档是否符合规范,并且还应检查在具有浏览上下文(其中脚本执行)的情况下解析时输入文档是否符合规范,以及脚本是否从未导致出现非符合状态,除了在脚本执行本身期间短暂出现之外。(这只是一个“应该”要求,而不是“必须”要求,因为事实证明这是不可能的。 [COMPUTABLE]

术语“HTML 验证器”可以用来指代本身符合本规范适用要求的一致性检查器。

XML DTD 无法表达本规范的所有一致性要求。因此,验证 XML 处理器和 DTD 不能构成一致性检查器。此外,由于本规范中定义的两种创作格式都不是 SGML 的应用,因此验证 SGML 系统也不能构成一致性检查器。

换句话说,有三类一致性标准

  1. 可以在 DTD 中表达的标准。
  2. 无法通过 DTD 表达,但仍可由机器检查的标准。
  3. 只能由人工检查的标准。

一致性检查器必须检查前两类。简单的基于 DTD 的验证器仅检查第一类错误,因此根据本规范,它不是符合规范的一致性检查器。

数据挖掘工具

出于渲染文档或检查其一致性以外的目的处理 HTML 和 XML 文档的应用程序和工具应根据其处理的文档的语义进行操作。

生成文档大纲但为每个段落增加嵌套级别而不为标题增加嵌套级别的工具将不符合规范。

创作工具和标记生成器

创作工具和标记生成器必须生成符合规范的文档。在适当的情况下,适用于作者的一致性标准也适用于创作工具。

创作工具免于仅为其指定目的使用元素的严格要求,但仅限于创作工具尚无法确定作者意图的程度。但是,创作工具不得自动滥用元素或鼓励其用户这样做。

例如,使用address 元素表示任意联系信息是不符合规范的;该元素只能用于标记其最近的articlebody 元素祖先的联系信息。但是,由于创作工具可能无法区分,因此创作工具免于该要求。但这并不意味着创作工具可以使用address 元素表示任意一段斜体文本(例如);它仅仅意味着创作工具不必验证当用户使用工具插入article 元素的联系信息时,用户确实是在这样做而不是插入其他内容。

在一致性检查方面,编辑器必须输出与一致性检查器验证程度相同的符合规范的文档。

当使用创作工具编辑不符合规范的文档时,它可能会保留在编辑会话期间未编辑的文档部分中的符合性错误(即,编辑工具允许往返错误内容)。但是,如果保留了错误,创作工具不得声明输出符合规范。

创作工具预计将分为两种主要类型:基于结构或语义数据工作的工具,以及基于所见即所得媒体特定编辑基础(WYSIWYG)工作的工具。

对于创作 HTML 的工具,前者是首选机制,因为源信息中的结构可用于做出关于哪些 HTML 元素和属性最合适的明智选择。

但是,WYSIWYG 工具是合法的。WYSIWYG 工具应使用已知合适的元素,并且不应使用不知道合适的元素。在某些极端情况下,这可能意味着将流元素的使用限制在少数几个元素上,例如divbispan,并大量使用style 属性。

所有创作工具,无论是否为 WYSIWYG,都应尽最大努力尝试使用户能够创建结构良好、语义丰富、独立于媒体的内容。

为了与现有内容和先前规范兼容,本规范描述了两种创作格式:一种基于XML,另一种使用受 SGML 启发的自定义格式(称为HTML 语法)。实现必须至少支持这两种格式中的一种,尽管鼓励支持这两种格式。

一些一致性要求被表述为对元素、属性、方法或对象的要球。此类要求分为两类:描述内容模型限制的要求和描述实现行为的要求。前一类是对文档和创作工具的要求。后一类是对用户代理的要求。类似地,一些一致性要求被表述为对作者的要求;此类要求应被解释为对作者生成的文档的一致性要求。(换句话说,本规范不区分对作者的一致性标准和对文档的一致性标准。)

2.1.9 依赖项

本规范依赖于其他几个底层规范。

Infra

以下术语在Infra中定义:[INFRA]

Unicode 和编码

Unicode 字符集用于表示文本数据,而Encoding 定义了围绕字符编码的要求。 [UNICODE]

本规范介绍了基于这些规范中定义的术语的术语,如前所述。

以下术语根据 编码 中的定义使用:[编码]

  • 获取编码
  • 获取输出编码
  • 通用 解码 算法,它接收一个字节流和一个编码,并返回一个字符流
  • UTF-8 解码 算法,它接收一个字节流并返回一个字符流,此外,如果存在,则剥离一个前导的 UTF-8 字节顺序标记 (BOM)
  • 不带 BOM 的 UTF-8 解码 算法,它与 UTF-8 解码 相同,只是它不剥离一个前导的 UTF-8 字节顺序标记 (BOM)
  • 编码 算法,它接收一个字符流和一个编码,并返回一个字节流
  • UTF-8 编码 算法,它接收一个字符流并返回一个字节流
  • BOM 探测 算法,它接收一个字节流并返回一个编码或 null。
XML 和相关规范

支持 HTML 的 XML 语法 的实现必须支持某个版本的 XML 以及其对应的命名空间规范,因为该语法使用带有命名空间的 XML 序列化。 [XML] [XMLNS]

执行内容操作而不运行脚本、评估 CSS 或 XPath 表达式或以其他方式将生成的 DOM 公开给任意内容的数据挖掘工具和其他用户代理可以通过仅仅断言其 DOM 节点类似物位于某些命名空间中来“支持命名空间”,而无需实际公开命名空间字符串。

HTML 语法 中,命名空间前缀和命名空间声明的作用与 XML 中的不同。例如,冒号在 HTML 元素名称中没有任何特殊含义。


名为 space 的属性位于 XML 命名空间 中,由 可扩展标记语言 (XML) 定义。 [XML]

Name 产生式在 XML 中定义。 [XML]

本规范还引用了 <?xml-stylesheet?> 处理指令,该指令在 将样式表与 XML 文档关联 中定义。 [XMLSSPI]

本规范还非规范性地提到了 XSLTProcessor 接口及其 transformToFragment()transformToDocument() 方法。 [XSLTP]

URL

以下术语在 URL 中定义:[URL]

本规范还引用了许多方案和协议

媒体片段语法媒体片段 URI 中定义。 [MEDIAFRAG]

HTTP 和相关规范

以下术语在 HTTP 规范中定义:[HTTP]

以下术语在 HTTP 状态管理机制 中定义:[COOKIES]

以下术语在 Web 链接 中定义:[WEBLINK]

以下术语在 HTTP 的结构化字段值 中定义:[STRUCTURED-FIELDS]

以下术语在 MIME 嗅探 中定义:[MIMESNIFF]

获取

以下术语在 获取 中定义:[FETCH]

以下术语在 推荐来源策略 中定义:[REFERRERPOLICY]

以下术语在 混合内容 中定义:[MIX]

以下术语在 子资源完整性 中定义:[SRI]

绘制计时

以下术语在 绘制计时 中定义:[PAINTTIMING]

导航计时

以下术语在 导航计时 中定义:[NAVIGATIONTIMING]

资源计时

以下术语在 资源计时 中定义:[RESOURCETIMING]

性能时间线

以下术语在 性能时间线 中定义:[PERFORMANCETIMELINE]

长时间动画帧

以下术语在 长时间动画帧 中定义:[LONGANIMATIONFRAMES]

长时间任务

以下术语在 长时间任务 中定义:[LONGTASKS]

Web IDL

本规范中的 IDL 片段必须按照符合 IDL 片段的要求进行解释,如 Web IDL 中所述。 [WEBIDL]

以下术语在 Web IDL 中定义

Web IDL 还定义了以下在本规范的 Web IDL 片段中使用的类型

本规范中“抛出”一词的使用方式与 Web IDL 中定义的相同。 DOMException 类型和以下异常名称由 Web IDL 定义,并由本规范使用

当本规范要求用户代理创建一个表示特定时间的 Date 对象(可能是特殊值 Not-a-Number)时,该时间(如果有)的毫秒分量必须截断为整数,并且新创建的 Date 对象的时间值必须表示截断后的时间。

例如,给定 2000 年 1 月 1 日 01:00 UTC 后 23045 毫秒的时间,即时间 2000-01-01T00:00:00.023045Z,则创建的表示该时间 Date 对象将表示与创建表示时间 2000-01-01T00:00:00.023Z(早 45 毫秒)相同的时间。如果给定的时间是 NaN,则结果是 Date 对象,它表示时间值 NaN(表示该对象不表示时间的特定时刻)。

JavaScript

本规范描述的语言的某些部分仅支持 JavaScript 作为底层脚本语言。 [JAVASCRIPT]

术语“JavaScript”用于指代 ECMA-262,而不是官方术语 ECMAScript,因为术语 JavaScript 更广为人知。

以下术语在 JavaScript 规范中定义,并在本规范中使用

支持 JavaScript 的用户代理还必须实现 动态代码品牌检查 提案。以下术语在此处定义,并在本规范中使用:[JSDYNAMICCODEBRANDCHECKS]

支持 JavaScript 的用户代理还必须实现 ECMAScript 国际化 API[JSINTL]

支持 JavaScript 的用户代理还必须实现 导入属性 提案。以下术语在此处定义,并在本规范中使用:[JSIMPORTATTRIBUTES]

支持 JavaScript 的用户代理还必须实现 JSON 模块 提案。以下术语在此处定义,并在本规范中使用:[JSJSONMODULES]

支持 JavaScript 的用户代理还必须实现 可调整大小的 ArrayBuffer 和可增长的 SharedArrayBuffer 提案。以下术语在此处定义,并在本规范中使用:[JSRESIZABLEBUFFERS]

支持 JavaScript 的用户代理还必须实现 Temporal 提案。以下术语在此处定义,并在本规范中使用:[JSTEMPORAL]

WebAssembly

以下术语在 WebAssembly JavaScript 接口 中定义:[WASMJS]

DOM

文档对象模型 (DOM) 是文档及其内容的表示——模型。DOM 不仅仅是一个 API;HTML 实现的符合性标准在本规范中根据对 DOM 的操作来定义。 [DOM]

实现必须支持 DOM 和 UI 事件中定义的事件,因为本规范是根据 DOM 定义的,并且某些功能被定义为 DOM 接口的扩展。 [DOM] [UIEVENTS]

特别是,以下功能在 DOM 中定义:[DOM]

以下功能在UI 事件中定义:[UIEVENTS]

以下功能在触摸事件中定义:[TOUCH]

以下功能在指针事件中定义:[POINTEREVENTS]

以下事件在剪贴板 API 和事件中定义:[CLIPBOARD-APIS]

本规范有时使用术语名称来指代事件的类型;例如,“名为click的事件”或“如果事件名称为keypress”。事件的术语“名称”和“类型”是同义词。

以下功能在DOM 解析和序列化中定义:[DOMPARSING]

以下功能在选择 API中定义:[SELECTION]

鼓励用户代理实现execCommand中描述的功能。 [EXECCOMMAND]

以下功能在全屏 API中定义:[FULLSCREEN]

高分辨率时间提供以下功能:[HRT]

文件 API

本规范使用文件 API中定义的以下功能:[FILEAPI]

索引数据库 API

本规范使用索引数据库 API定义的清理索引数据库事务[INDEXEDDB]

媒体源扩展

以下术语在媒体源扩展中定义:[MEDIASOURCE]

媒体捕获和流

以下术语在媒体捕获和流中定义:[MEDIASTREAM]

报告

以下术语在报告中定义:[REPORTING]

XMLHttpRequest

以下功能和术语在XMLHttpRequest中定义:[XHR]

电池状态

以下特性在Battery Status API中定义:[BATTERY]

媒体查询

实现必须支持媒体查询。其中定义了 <media-condition> 特性。 [MQ]

CSS 模块

虽然本规范的实现不要求支持整个 CSS(但至少对于 Web 浏览器而言,建议支持),但某些特性是根据特定的 CSS 要求定义的。

当本规范要求根据特定的 CSS 语法 解析某些内容 时,必须遵循CSS 语法中的相关算法,包括错误处理规则。 [CSSSYNTAX]

例如,用户代理在意外发现样式表结尾时,需要关闭所有打开的结构。因此,当为颜色值解析字符串“rgb(0,0,0”(缺少右括号)时,此错误处理规则隐含了右括号,并获得了值(颜色“黑色”)。但是,类似的结构“rgb(0,0,”(缺少括号和“蓝色”值)无法解析,因为关闭打开的结构不会产生有效的值。

以下术语和特性在层叠样式表CSS)中定义:[CSS]

  • 视口
  • 行框
  • 非内联
  • 内联
  • 外边距折叠
  • 包含块
  • 内联框
  • 块级框
  • 'top''bottom''left''right' 属性
  • 'float' 属性
  • 'clear' 属性
  • 'width' 属性
  • 'height' 属性
  • 'min-width' 属性
  • 'min-height' 属性
  • 'max-width' 属性
  • 'max-height' 属性
  • 'line-height' 属性
  • 'vertical-align' 属性
  • 'content' 属性
  • 'display' 属性的 'inline-block'
  • 'visibility' 属性

'display' 属性的基本版本在CSS中定义,该属性由其他 CSS 模块扩展。 [CSS] [CSSRUBY] [CSSTABLE]

以下术语和特性在CSS 盒模型中定义:[CSSBOX]

以下特性在CSS 逻辑属性中定义:[CSSLOGICAL]

  • 'margin-block''margin-block-start''margin-block-end''margin-inline''margin-inline-start''margin-inline-end' 属性
  • 'padding-block''padding-block-start''padding-block-end''padding-inline''padding-inline-start''padding-inline-end' 属性
  • 'border-block-width''border-block-start-width''border-block-end-width''border-inline-width''border-inline-start-width''border-inline-end-width''border-block-style''border-block-start-style''border-block-end-style''border-inline-style''border-inline-start-style''border-inline-end-style''border-block-start-color''border-block-end-color''border-inline-start-color''border-inline-end-color''border-start-start-radius''border-start-end-radius''border-end-start-radius''border-end-end-radius' 属性
  • 'block-size' 属性
  • 'inline-size' 属性
  • 'inset-block-start' 属性
  • 'inset-block-end' 属性

以下术语和特性在CSS 颜色中定义:[CSSCOLOR]

以下术语在CSS 图像中定义:[CSSIMAGES]

术语 绘制源 用于根据CSS 图像级别 4定义某些 HTML 元素与 CSS element() 函数的交互。 [CSSIMAGES4]

以下特性在CSS 背景和边框中定义:[CSSBG]

  • 'background-color''background-image''background-repeat''background-attachment''background-position''background-clip''background-origin''background-size' 属性
  • 'border-radius''border-top-left-radius''border-top-right-radius''border-bottom-right-radius''border-bottom-left-radius' 属性
  • 'border-image-source''border-image-slice''border-image-width''border-image-outset''border-image-repeat' 属性

CSS 背景和边框还定义了以下边框属性:[CSSBG]

边框属性
顶部底部

宽度'border-top-width' 'border-bottom-width' 'border-left-width' 'border-right-width'
样式'border-top-style' 'border-bottom-style' 'border-left-style' 'border-right-style'
颜色'border-top-color' 'border-bottom-color' 'border-left-color' 'border-right-color'

以下特性在CSS 盒子对齐中定义:[CSSALIGN]

以下术语和特性在CSS 显示中定义:[CSSDISPLAY]

以下特性在CSS 弹性盒子布局中定义:[CSSFLEXBOX]

以下术语和特性在CSS 字体中定义:[CSSFONTS]

以下特性在CSS 网格布局中定义:[CSSGRID]

以下术语在CSS 内联布局中定义:[CSSINLINE]

以下术语和特性在CSS 盒子大小中定义:[CSSSIZING]

以下特性在CSS 列表和计数器中定义。 [CSSLISTS]

以下特性在CSS 溢出中定义。 [CSSOVERFLOW]

以下术语和特性在CSS 定位布局中定义:[CSSPOSITION]

以下特性在CSS 多列布局中定义。 [CSSMULTICOL]

The 'ruby-base' 值的 'display' 属性在CSS 注音布局中定义。 [CSSRUBY]

以下特性在CSS 表格中定义:[CSSTABLE]

以下特性在CSS 文本中定义:[CSSTEXT]

以下特性在CSS 书写模式中定义:[CSSWM]

以下特性在CSS 基本用户界面中定义:[CSSUI]

更新动画并发送事件的算法在Web 动画中定义。 [WEBANIMATIONS]

支持脚本的实现必须支持 CSS 对象模型。以下特性和术语在 CSSOM 规范中定义:[CSSOM] [CSSOMVIEW]

以下功能和术语在 CSS 语法 中定义:[CSSSYNTAX]

以下术语在 选择器 中定义:[SELECTORS]

以下功能在 CSS 值和单位 中定义:[CSSVALUES]

以下功能在 CSS 视图过渡 中定义:[CSSVIEWTRANSITIONS]

术语 样式属性CSS 样式属性 中定义。 [CSSATTR]

以下术语在 CSS 级联和继承 中定义:[CSSCASCADE]

CanvasRenderingContext2D 对象对字体的使用取决于 CSS 字体字体加载 规范中描述的功能,特别是包括 FontFace 对象和 字体源 概念。 [CSSFONTS] [CSSFONTLOAD]

以下接口和术语在 几何接口 中定义:[GEOMETRY]

以下术语在 CSS 作用域 中定义:[CSSSCOPING]

以下术语和功能在 CSS 颜色调整 中定义:[CSSCOLORADJUST]

以下术语在 CSS 伪元素 中定义:[CSSPSEUDO]

以下术语在 CSS 包含 中定义:[CSSCONTAIN]

Intersection Observer

以下术语在 Intersection Observer 中定义:[INTERSECTIONOBSERVER]

Resize Observer

以下术语在 Resize Observer 中定义:[RESIZEOBSERVER]

WebGL

以下接口在 WebGL 规范中定义:[WEBGL]

WebGPU

以下接口在 WebGPU 中定义:[WEBGPU]

WebVTT

实现可以支持 WebVTT 作为字幕、隐藏字幕、元数据等的文本轨道格式,用于媒体资源。 [WEBVTT]

以下在本规范中使用的术语在 WebVTT 中定义

ARIA

role 属性在 可访问的富互联网应用程序 (ARIA) 中定义,以下角色也在其中定义:[ARIA]

此外,以下 aria-* 内容属性在 ARIA 中定义:[ARIA]

最后,以下术语在 ARIA 中定义:[ARIA]

内容安全策略

以下术语在 内容安全策略 中定义:[CSP]

服务工作线程

以下术语在《服务工作线程》中定义:[SW]

安全上下文

以下算法在《安全上下文》中定义:[SECURE-CONTEXTS]

权限策略

以下术语在《权限策略》中定义:[PERMISSIONSPOLICY]

支付请求 API

以下功能在《支付请求 API》中定义:[PAYMENTREQUEST]

  • PaymentRequest 接口
MathML

虽然本规范不要求全面支持 MathML(但至少对于 Web 浏览器而言,鼓励支持),但某些功能依赖于 MathML 的某些小部分的实现。[MATHML]

以下功能在《数学标记语言》(《MathML》)中定义

  • MathML annotation-xml 元素
  • MathML math 元素
  • MathML merror 元素
  • MathML mi 元素
  • MathML mn 元素
  • MathML mo 元素
  • MathML ms 元素
  • MathML mtext 元素
SVG

虽然本规范不要求全面支持 SVG(但至少对于 Web 浏览器而言,鼓励支持),但某些功能依赖于 SVG 部分的实现。

实现 SVG 的用户代理必须实现《SVG 2》规范,而不是任何较早的修订版。

以下功能在《SVG 2》规范中定义:[SVG]

  • SVGElement 接口
  • SVGImageElement 接口
  • SVGScriptElement 接口
  • SVGSVGElement 接口
  • SVG a 元素
  • SVG desc 元素
  • SVG foreignObject 元素
  • SVG image 元素
  • SVG script 元素
  • SVG svg 元素
  • SVG title 元素
  • SVG use 元素
  • SVG text-rendering 属性
滤镜效果

以下功能在《滤镜效果》中定义:[FILTERS]

合成

以下功能在《合成和混合》中定义:[COMPOSITE]

后台任务的协作调度

以下功能在《后台任务的协作调度》中定义:[REQUESTIDLECALLBACK]

屏幕方向

以下术语在《屏幕方向》中定义:[SCREENORIENTATION]

存储

以下术语在《存储》中定义:[STORAGE]

Web 应用清单

以下功能在《Web 应用清单》中定义:[MANIFEST]

WebAssembly JavaScript 接口:ESM 集成

以下术语在《WebAssembly JavaScript 接口:ESM 集成》中定义:[WASMESM]

WebCodecs

以下功能在《WebCodecs》中定义:[WEBCODECS]

WebDriver

以下术语在《WebDriver》中定义:[WEBDRIVER]

WebDriver BiDi

以下术语在《WebDriver BiDi》中定义:[WEBDRIVERBIDI]

Web 加密 API

以下术语在《Web 加密 API》中定义:[WEBCRYPTO]

WebSockets

以下术语在《WebSockets》中定义:[WEBSOCKETS]

WebTransport

以下术语在《WebTransport》中定义:[WEBTRANSPORT]

Web 身份验证:访问公钥凭据的 API

以下术语在《Web 身份验证:访问公钥凭据的 API》中定义:[WEBAUTHN]

凭据管理

以下术语在《凭据管理》中定义:[CREDMAN]

控制台

以下术语在《控制台》中定义:[CONSOLE]

Web 锁 API

以下术语在《Web 锁 API》中定义:[WEBLOCKS]

可信类型

本规范使用《可信类型》中定义的以下功能:[TRUSTED-TYPES]


本规范**不**要求支持任何特定的网络协议、样式表语言、脚本语言或任何超出上述列表中要求的 DOM 规范。但是,本规范描述的语言偏向于 CSS 作为样式语言、JavaScript 作为脚本语言以及 HTTP 作为网络协议,并且某些功能假设正在使用这些语言和协议。

实现 HTTP 协议的用户代理也必须实现《HTTP 状态管理机制》(Cookie)。[HTTP] [COOKIES]

本规范可能对各个部分中的字符编码、图像格式、音频格式和视频格式有一些其他要求。

2.1.10 可扩展性

强烈建议不要使用供应商专有的用户代理扩展来扩展本规范。文档不得使用此类扩展,因为这样做会降低互操作性并导致用户群碎片化,从而只允许特定用户代理的用户访问相关内容。

所有扩展都必须定义为,扩展的使用既不与规范中定义的功能相矛盾,也不导致其不符合规范。

例如,虽然强烈建议不要这样做,但实现可以向控件添加一个新的 IDL 属性“typeTime”,该属性返回用户选择控件当前值所花费的时间(例如)。另一方面,定义一个出现在表单的elements 数组中的新控件将违反上述要求,因为它违反了本规范中给出的elements 的定义。


当需要对本规范进行供应商中立的扩展时,可以相应地更新本规范,或者可以编写一个扩展规范来覆盖本规范中的要求。当某人将本规范应用于其活动时,决定他们将识别此类扩展规范的要求,则它成为本规范的符合性要求的适用规范

有人可能会编写一个规范,将任意字节流定义为符合规范的,然后声称他们的随机垃圾是符合规范的。但是,这并不意味着他们的随机垃圾实际上对每个人的目的都是符合规范的:如果其他人认为该规范不适用于他们的工作,那么他们完全可以合法地说,前面提到的随机垃圾就是垃圾,根本不符合规范。就一致性而言,特定社区中重要的是该社区达成一致认为适用的内容。


用户代理必须将它们不理解的元素和属性视为语义中立;将它们保留在 DOM 中(对于 DOM 处理器),并根据 CSS 对其进行样式设置(对于 CSS 处理器),但不要从中推断任何含义。

当禁用对某个功能的支持时(例如,作为缓解安全问题的应急措施,或为了帮助开发,或出于性能原因),用户代理必须表现得好像它们根本不支持该功能,并且好像该功能未在本规范中提及。例如,如果通过 Web IDL 接口中的属性访问特定功能,则该属性本身将从实现该接口的对象中省略——将属性保留在对象上但使其返回 null 或抛出异常是不够的。

2.1.11 与 XPath 和 XSLT 的交互

在以本规范中描述的方式(例如,作为 document.evaluate() API 的一部分)解析或创建的HTML 文档上运行的 XPath 1.0 实现必须表现得好像已对 XPath 1.0 规范应用了以下编辑。

首先,删除此段落

节点测试中的QName 使用表达式上下文中的命名空间声明扩展为expanded-name。这与在开始和结束标记中对元素类型名称执行扩展的方式相同,只是不使用用 xmlns 声明的默认命名空间:如果QName 没有前缀,则命名空间 URI 为 null(这与属性名称的扩展方式相同)。如果QName 具有在表达式上下文中没有命名空间声明的前缀,则为错误。

然后,在其位置插入以下内容

节点测试中的 QName 使用表达式上下文中的命名空间声明扩展为扩展名称。如果 QName 具有前缀,则表达式上下文中必须为此前缀存在命名空间声明,并且相应的命名空间 URI 是与该前缀关联的 URI。如果 QName 具有在表达式上下文中没有命名空间声明的前缀,则为错误。

如果 QName 没有前缀并且轴的主节点类型为元素,则使用默认元素命名空间。否则,如果 QName 没有前缀,则命名空间 URI 为 null。默认元素命名空间是 XPath 表达式上下文的成员。通过 DOM3 XPath API 执行 XPath 表达式时,默认元素命名空间的值通过以下方式确定

  1. 如果上下文节点来自 HTML DOM,则默认元素命名空间为“http://www.w3.org/1999/xhtml”。
  2. 否则,默认元素命名空间 URI 为 null。

这相当于将 XPath 2.0 的默认元素命名空间功能添加到 XPath 1.0,并使用 HTML 命名空间作为 HTML 文档的默认元素命名空间。其动机是希望实现与旧版 HTML 内容兼容,同时仍然支持本规范对 HTML 引入的关于用于 HTML 元素的命名空间的更改,以及希望使用 XPath 1.0 而不是 XPath 2.0。

此更改是有意违反XPath 1.0 规范的行为,其动机是希望实现与旧版内容兼容,同时仍然支持本规范对 HTML 引入的关于用于 HTML 元素的命名空间的更改。[XPATH10]


当输出方法为“html”(显式或通过 XSLT 1.0 中的默认规则)时,输出到 DOM 的 XSLT 1.0 处理器会受到以下影响

如果转换程序在没有命名空间的情况下输出元素,则处理器必须在构造相应的 DOM 元素节点之前,将元素的命名空间更改为HTML 命名空间,将元素的本地名称转换为小写 ASCII,并将元素上任何无命名空间属性的名称转换为小写 ASCII

此要求是有意违反XSLT 1.0 规范的行为,这是必需的,因为本规范以与基于 DOM 的 XSLT 转换不兼容的方式更改了 HTML 的命名空间和大小写敏感规则。(序列化输出的处理器不受影响。)[XSLT10]


本规范未精确指定 XSLT 处理如何与HTML 解析器基础结构交互(例如,XSLT 处理器是否表现得好像它将任何元素放入打开元素栈中)。但是,如果 XSLT 处理器成功完成,则必须停止解析,并且如果它们被中止,则必须首先将当前文档就绪状态更新为“interactive”,然后更新为“complete”。


本规范未指定 XSLT 如何与导航算法交互,它如何与事件循环相适应,以及如何处理错误页面(例如,XSLT 错误是否替换增量 XSLT 输出,还是内联呈现等)。

此外,在script 元素部分中还有一些关于 XSLT 和 HTML 交互的非规范性注释,以及在template 元素部分中关于 XSLT、XPath 和 HTML 的非规范性注释。

2.2 策略控制的功能

Headers/Permissions-Policy/document-domain

仅在一个引擎中支持。

Firefox🔰 74+SafariChrome🔰 88+
OperaEdge🔰 88+
Edge(旧版)Internet Explorer
Firefox AndroidSafari iOSChrome AndroidWebView AndroidSamsung InternetOpera Android

本文档定义了以下策略控制的功能

Headers/Feature-Policy/autoplay

Firefox🔰 74+SafariChrome64+
OperaEdge79+
Edge(旧版)Internet Explorer
Firefox AndroidSafari iOSChrome AndroidWebView AndroidSamsung InternetOpera Android

Headers/Permissions-Policy/autoplay

仅在一个引擎中支持。

Firefox🔰 74+SafariChrome88+
OperaEdge88+
Edge(旧版)Internet Explorer
Firefox AndroidSafari iOSChrome AndroidWebView AndroidSamsung InternetOpera Android