Firefox 中的实验性特性
===============

本页列出了 Firefox 的实验性和部分实现的特性，包括针对提议的或前沿的网络平台标准的特性，以及这些特性的版本信息、是否“默认”激活这些特性，以及可用于激活或停用这些特性的偏好设置。这样，就可以在特性发布前对其进行测试。

新特性首先出现在 Firefox Nightly 版本中，通常默认启用。它们随后会引入到 Firefox 浏览器开发者版，并最终引入到发布版本中。在发布版中默认启用某项特性后，该特性就不再被视为实验性特性，应从主题中删除。

可以使用 Firefox 配置编辑器（在 Firefox 地址栏中输入 `about:config`）通过修改下面列出的相关首选项来启用或禁用实验特性。

**备注：** 对编者的信息——当在这些表格添加特性时，请尝试使用 `[Firefox bug <number>](https://bugzil.la/<number>)` 包含指向相关 bug 的链接。

HTML
----

### input type="search" 外观

输入类型 `type="search"` 的布局已更新。一旦有人开始输入，搜索字段就会有一个清晰的图标，以便与其他浏览器的实现相匹配。（详情请参见 Firefox bug 558594）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 81 | 否 |
| 开发者版 | 81 | 否 |
| Beta | 81 | 否 |
| 发行版 | 81 | 否 |
| 首选项名称 | `layout.forms.input-type-search.enabled` |

### 切换密码显示

HTML 密码输入元素（`<input type="password">`）包含一个“眼睛”图标，可通过切换来显示或遮盖密码文本（Firefox bug 502258）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 96 | 否 |
| 开发者版 | 96 | 否 |
| Beta | 96 | 否 |
| 发行版 | 96 | 否 |
| 首选项名称 | `layout.forms.input-type-show-password-button.enabled` |

### ARIA 属性反射

为非 IDREF 属性启用了 ARIA 反射特性，允许作者通过 JavaScript API 直接获取和设置 DOM 元素上的 ARIA 属性，而不是使用 `setAttribute` 和 `getAttribute`（详情请参见 Firefox bug 1824980）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 114 | 是 |
| 开发者版 | 114 | 否 |
| Beta | 114 | 否 |
| 发行版 | 114 | 否 |
| 首选项名称 | `accessibility.ARIAReflection.enabled` |

CSS
---

### 显示杂散控制字符的十六进制框

该特性会将除*制表符*（`U+0009`）、*换行符*（`U+000A`）、*换页符*（`U+000C`）和*回车符*（`U+000D`）以外的控制字符（Unicode 类别 Cc）渲染为十六进制框，而这些控制字符并非预期字符。（详见 Firefox bug 1099557）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 43 | 是 |
| 开发者版 | 43 | 否 |
| Beta | 43 | 否 |
| 发行版 | 43 | 否 |
| 首选项名称 | `layout.css.control-characters.enabled` 或 `layout.css.control-characters.visible` |

### initial-letter 属性

`initial-letter` (en-US) CSS 属性是 CSS Inline Layout 规范的一部分，允许指定如何显示下垂、凸起和下沉的首字母。（详情请参见 Firefox bug 1223880）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 50 | 否 |
| 开发者版 | 50 | 否 |
| Beta | 50 | 否 |
| 发行版 | 50 | 否 |
| 首选项名称 | `layout.css.initial-letter.enabled` |

### content-visibility: auto 值

如果内容不与用户相关，`content-visibility` CSS 属性值 `auto` 允许跳过渲染。（详见 Firefox bug 1798485）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 113 | 是 |
| 开发者版 | 109 | 否 |
| Beta | 109 | 否 |
| 发行版 | 109 | 否 |
| 首选项名称 | `layout.css.content-visibility.enabled` |

请注意，相关的 `contentvisibilityautostatechange` 事件和相关的 `ContentVisibilityAutoStateChangeEvent` 接口是在版本 110 中添加的，并由相同的首选项控制。应用程序代码可使用这些特性监控可见性变化，并在用户代理跳过元素内容时停止与渲染元素相关的进程。（详见 Firefox bug 1791759。）

### 在媒体查询中将单个数字作为纵横比

在为媒体查询指定宽高比时，支持将单个 `<number>` 用作 `<ratio>` 。（详见 Firefox bug 1565562）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 70 | 否 |
| 开发者版 | 70 | 否 |
| Beta | 70 | 否 |
| 发行版 | 70 | 否 |
| 首选项名称 | `layout.css.aspect-ratio-number.enabled` |

### backdrop-filter 属性

`backdrop-filter` 属性会对元素后面的区域应用过滤效果。（详情请参见 Firefox bug 1178765）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 70 | 否 |
| 开发者版 | 70 | 否 |
| Beta | 70 | 否 |
| 发行版 | 70 | 否 |
| 首选项名称 | `layout.css.backdrop-filter.enabled` |

### CSS 函数 ray()

CSS `ray()` (en-US) 函数是定义 `offset-path` (en-US) 的一种方法。该函数将路径定义为从 `offset-position` (en-US) 开始并向指定角度方向延伸的线段（Firefox bug 1582554）。

在版本 112 中，该函数添加了 `<ray_size>` 可选参数。如果没有提供 `<ray_size>`参数，该函数将默认使用 `closest-side` 值（Firefox bug 1820071）。

在版本 116 中，该函数增加了 `at <position>` 可选参数。如果省略，则使用元素的 `offset-position` 值。如果同时没有 `at <position>` 和 `offset-position` 值，则使用 `offset-position: auto` 作为射线的起始位置，将元素置于元素框的左上角。（Firefox bug 1820070）

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 72 | 是 |
| 开发者版 | 72 | 否 |
| Beta | 72 | 否 |
| 发行版 | 72 | 否 |
| 首选项名称 | `layout.css.motion-path-ray.enabled` |

### Masonry grid 布局

新增对基于网格布局的 masonry 风格布局 (en-US)的支持，其中一个轴为 masonry 布局，另一个轴为普通网格布局。这样，开发人员就能像在 Pinterest 上一样轻松创建画廊风格的布局。更多详情，请参阅 Firefox bug 1607954。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 77 | 是 |
| 开发者版 | 77 | 否 |
| Beta | 77 | 否 |
| 发行版 | 77 | 否 |
| 首选项名称 | `layout.css.grid-template-masonry-value.enabled` |

### fit-content() 函数

`fit-content()` 函数适用于 `width` 和其他大小属性。CSS 网格布局轨迹大小已经支持该函数。（详情请参见 Firefox bug 1312588）

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 91 | 否 |
| 开发者版 | 91 | 否 |
| Beta | 91 | 否 |
| 发行版 | 91 | 否 |
| 首选项名称 | `layout.css.fit-content-function.enabled` |

### 滚动驱动的动画

滚动驱动动画早先被称为“滚动链接动画”，它取决于滚动条的滚动位置，而不是时间或其他维度。通过 `scroll-timeline-name` (en-US) 和 `scroll-timeline-axis` (en-US) 属性（以及 `scroll-timeline` (en-US) 速记属性），你可以指定特定命名容器中的特定滚动条作为滚动驱动动画的源。然后，通过将 `animation-timeline` (en-US) 属性设置为使用 `scroll-timeline-name` 定义的名称值，可以将滚动时间轴与动画关联。

使用 `scroll-timeline` (en-US) 速记属性时，属性值的顺序必须是 `scroll-timeline-name` (en-US) 后跟 `scroll-timeline-axis` (en-US)。完整属性和速记属性均可在首选项后面使用。

也可以使用 `scroll()` (en-US) 函数标记和 `animation-timeline` (en-US) 来表示时间轴将使用祖先元素中的滚动条轴。

有关详细信息，请参阅 Firefox bug 1807685、Firefox bug 1804573、Firefox bug 1809005、Firefox bug 1676791、Firefox bug 1754897 和 Firefox bug 1737918。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 110 | 否 |
| 开发者版 | 110 | 否 |
| Beta | 110 | 否 |
| 发行版 | 110 | 否 |
| 首选项名称 | `layout.css.scroll-driven-animations.enabled` |

### :has() 伪类

`:has()` 伪类会选择包含作为参数传递的选择器的元素。（详见 Firefox bug 1771896）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 103 | 否 |
| 开发者版 | 103 | 否 |
| Beta | 103 | 否 |
| 发行版 | 103 | 否 |
| 首选项名称 | `layout.css.has-selector.enabled` |

### @font-face src 特性检查

`@font-face` `src` 描述符现在支持 `tech()` 函数，允许根据用户代理是否支持特定字体特性或技术来决定是否下载字体资源。详情请参见 Firefox bug 1715546。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 105 | 是 |
| 开发者版 | 105 | 否 |
| Beta | 105 | 否 |
| 发行版 | 105 | 否 |
| 首选项名称 | `layout.css.font-tech.enabled` |

### round() 数学函数

CSS `round()` (en-US) 函数是一个数学函数，可根据选定的舍入策略对数字（或表达式的结果）进行舍入。详情请参见 Firefox bug 1764850。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 108 | 是 |
| 开发者版 | 108 | 否 |
| Beta | 108 | 否 |
| 发行版 | 108 | 否 |
| 首选项名称 | `layout.css.round.enabled` |

### font-variant-emoji

通过 CSS `font-variant-emoji` (en-US) 属性，你可以设置显示表情符号的默认显示样式。详情请参见（Firefox bug 1461589）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 108 | 是 |
| 开发者版 | 108 | 否 |
| Beta | 108 | 否 |
| 发行版 | 108 | 否 |
| 首选项名称 | `layout.css.font-variant-emoji.enabled` |

### page-orientation

**`page-orientation`** CSS `@page` at-rule 的描述符控制打印页面的旋转。当页面方向发生变化时，它将处理跨页面的内容流。该行为与 `size` (en-US) 描述符不同，用户可以定义页面的旋转方向。详情请参见（Firefox bug 1673987）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 111 | 是 |
| 开发者版 | 111 | 否 |
| Beta | 111 | 否 |
| 发行版 | 111 | 否 |
| 首选项名称 | `layout.css.page-orientation.enabled` |

### prefers-reduced-transparency 媒体特性

 CSS `prefers-reduced-transparency`` (en-US) 媒体特性可让你检测用户是否已启用设置，以尽量减少设备上的透明或半透明图层效果。
 更多详情请参见（Firefox bug 1736914）。


| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 113 | 否 |
| 开发者版 | 113 | 否 |
| Beta | 113 | 否 |
| 发行版 | 113 | 否 |
| 首选项名称 | `layout.css.prefers-reduced-transparency.enabled` |

### inverted-colors 媒体特性

通过 CSS `inverted-colors` (en-US) 媒体特性，可以检测用户代理或底层操作系统是否正在反转颜色。详情请参阅（Firefox bug 1794628）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 114 | 否 |
| 开发者版 | 114 | 否 |
| Beta | 114 | 否 |
| 发行版 | 114 | 否 |
| 首选项名称 | `layout.css.inverted-colors.enabled` |

### 具名观看进度时间线属性

通过 CSS `view-timeline-name` (en-US) 属性，你可以为特定元素赋予一个名称，表明其祖先滚动元素是视图进度时间轴的来源。然后，可以将该名称分配给 `animation-timeline`，当相关元素在其祖先滚动器的可见区域内移动时，`animation-timeline` 就会为其制作动画。详情请参见（Firefox bug 1737920）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 114 | 否 |
| 开发者版 | 114 | 否 |
| Beta | 114 | 否 |
| 发行版 | 114 | 否 |
| 首选项名称 | `layout.css.scroll-driven-animations.enabled` |

### 匿名观看进度时间线属性

通过 CSS `view()` (en-US) 函数，可以指定元素的 `animation-timeline` 为视图进度时间轴，当元素在其父元素滚动条的可见区域内移动时，该时间轴将为其制作动画。该函数定义了提供时间轴的父元素的轴，以及动画开始和开始的可见区域的嵌入区。详情请参见（Firefox bug 1808410）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 114 | 否 |
| 开发者版 | 114 | 否 |
| Beta | 114 | 否 |
| 发行版 | 114 | 否 |
| 首选项名称 | `layout.css.scroll-driven-animations.enabled` |

### offset-position 属性

CSS `offset-position` (en-US) 属性定义了元素在路径上的初始位置。该属性的语法中新增了一个名为 `normal` 的关键字。使用该关键字时，元素在 `offset-path` (en-US) 上的初始起始位置取决于用于指定 `offset-path` 属性值的 CSS 函数（`path()` (en-US) 或 `ray()` (en-US)）。更多信息，请参阅 `offset-position` (en-US)。详情请参见（Firefox bug 1559232）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 116 | 是 |
| 开发者版 | 116 | 否 |
| Beta | 116 | 否 |
| 发行版 | 116 | 否 |
| 首选项名称 | `layout.css.motion-path-offset-position.enabled` |

### abs() 和 sign() 数学函数

CSS `abs()` (en-US) 和 `sign()` (en-US) 数学函数允许你分别获取参数的绝对值和符号。详情请参见 Firefox bug 1814588 和 Firefox bug 1814589。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 117 | 是 |
| 开发者版 | 117 | 否 |
| Beta | 117 | 否 |
| 发行版 | 117 | 否 |
| 首选项名称 | `layout.css.abs-sign.enabled` |

### rect() 和 xywh() 基本图形函数

通过 CSS `rect()` (en-US) 和 `xywh()` (en-US) 形状函数，你可以使用 `<basic-shape>` 数据类型定义矩形。在 CSS 属性（如 `offset-path` (en-US)）中，这些函数用于定义元素移动路径的形状。使用 `rect()` 函数，可以指定矩形边缘与包含块的顶部边缘和左侧边缘的偏移量。使用 `xywh()` 函数，可以指定矩形边缘与包含块的左边缘和顶边缘的偏移量，以及矩形的宽度和高度。在这两个函数中，都可以选择对边角进行舍入。有关详细信息，请参阅 `rect()` 函数的 Firefox bug 1786161 和 `xywh()` 函数的 Firefox bug 1786160。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 117 | 是 |
| 开发者版 | 117 | 否 |
| Beta | 117 | 否 |
| 发行版 | 117 | 否 |
| 首选项名称 | `layout.css.motion-path-basic-shapes.enabled`、`layout.css.basic-shape-rect.enabled`、`layout.css.basic-shape-xywh.enabled` |

SVG
---

### SVGPathSeg API 接口

SVGPathSeg API 接口将不再包含，并被置于首选项之后。其中包括 `SVGPathSegList`、SVGPathElement.getPathSegAtLength() (en-US)、`SVGAnimatedPathData`。（详见 Firefox bug 1388931）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 97 | 否 |
| 开发者版 | 97 | 否 |
| Beta | 97 | 否 |
| 发行版 | 97 | 否 |
| 首选项名称 | `dom.svg.pathSeg.enabled` |

JavaScript
----------

### 数组（可迭代）分组方法

`Object.groupBy()` 和 `Map.groupBy()` 静态方法分别用于使用字符串或测试函数返回的值对可迭代元素进行分组。当字符串可用于表示元素组时，应使用第一个方法，而当元素与特定对象相关联时，可使用 `Map` 中的方法。（详见 Firefox bug 1841518）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 117 | 否 |
| 开发者版 | NA | 否 |
| Beta | NA | 否 |
| 发行版 | NA | 否 |
| 首选项名称 | `javascript.options.experimental.array_grouping` |

### 数组转移

`ArrayBuffer.prototype.transfer()` 和 `ArrayBuffer.prototype.transferToFixedLength()` 方法用于从一个`ArrayBuffer` 向另一个 `ArrayBuffer` 转移内存所有权。`transferToFixedLength()`方法总是创建固定长度的缓冲区，而 `transfer()` 方法可以创建可变长度的缓冲区，但前提是原始缓冲区的长度是可变的。传输后，原始缓冲区将从原始内存中分离，因此无法使用；可以使用 `ArrayBuffer.prototype.detached` 检查其状态。（详情请参见 Firefox bug 1841113）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 117 | 否 |
| 开发者版 | NA | 否 |
| Beta | NA | 否 |
| 发行版 | NA | 否 |
|
| 首选项名称 | `javascript.options.experimental.arraybuffer_transfer` |

### 字符串 isWellFormed() 和 toWellFormed() 方法

JavaScript 中的字符串由无符号 16 位整数序列表示，因此有可能出现有效字符串值不是格式良好的 Unicode 文本的情况。`String.prototype.isWellFormed()` 和 `String.prototype.toWellFormed()` 方法分别用于检查字符串是否为格式正确的 Unicode 文本，以及将字符串转换为格式正确的 Unicode 文本。详见 tc39/proposal-is-usv-string 和 Firefox bug 1825005。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 115 | 否 |
| 开发者版 | - | - |
| Beta | - | - |
| 发行版 | - | - |
| 首选项名称 | `javascript.options.experimental.well_formed_unicode_strings` |

API
---

### 图形：Canvas、WebGL 和 WebGPU

#### 热点区域

鼠标坐标是否位于画布上的特定区域内是一个需要解决的常见问题。通过点击区域 API，可以定义画布的某个区域，并为将画布上的交互式内容展示给辅助工具提供了另一种可能性。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 30 | 否 |
| 开发者版 | 30 | 否 |
| Beta | 30 | 否 |
| 发行版 | 30 | 否 |
| 首选项名称 | `canvas.hitregions.enabled` |

#### WebGL：草稿扩展

启用此偏好设置后，当前处于“草稿”状态且正在测试的任何 WebGL 扩展都将启用。目前，Firefox 没有正在测试的 WebGL 扩展。

#### WebGPU API

WebGPU API 为使用用户设备或计算机的图形处理单元（GPU）执行计算和图形渲染提供底层支持。请参见 Firefox bug 1602129，了解我们在此 API 方面的进展。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 113 | 是 |
| 开发者版 | 73 | 否 |
| Beta | 73 | 否 |
| 发行版 | 73 | 否 |
| 首选项名称 | `dom.webgpu.enabled` |

### WebRTC 和媒体

以下试验性特性包括 WebRTC API、网络音频 API、媒体源扩展 API、加密媒体扩展 API (en-US) 和 Media 捕获和流 API。

#### 异步 SourceBuffer 添加和移除

这将为 SourceBuffer 添加基于 promise 的 `appendBufferAsync()` (en-US) 和 `removeAsync()` (en-US) 方法，用于添加和删除媒体源缓冲区。更多信息请参见 Firefox bug 1280613 和 Firefox bug 778617。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 62 | 否 |
| 开发者版 | 62 | 否 |
| Beta | 62 | 否 |
| 发行版 | 62 | 否 |
| 首选项名称 | `media.mediasource.experimental.enabled` |

#### AVIF 严格合规性

`image.avif.compliance_strictness` 偏好设置可用于控制处理 AVIF 图像时应用的*严格程度*。这允许 Firefox 用户显示在某些其他浏览器上呈现的图像，即使这些图像并不严格符合标准。

允许的值为：

* `0`: 接受建议（“应该”）和要求（“必须”）中违反规范的图像，前提是它们可以被安全或明确地解释。
* `1`（默认）：拒绝违反要求，但允许违反建议。
* `2`: 严格。拒绝任何违反要求或建议的行为。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 92 | 1 |
| 开发者版 | 92 | 1 |
| Beta | 92 | 1 |
| 发行版 | 92 | 1 |
| 首选项名称 | `image.avif.compliance_strictness` |

#### JPEG XL 支持

如果启用此特性，Firefox 支持 JPEG XL 图像。详情请参见 Firefox bug 1539075。

请注意，如下表所示，该特性只适用于 Nightly 构建版本（无论是否设置了偏好设置）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 90 | 否 |
| 开发者版 | — | — |
| Beta | — | — |
| 发行版 | — | — |
| 首选项名称 | `image.jxl.enabled` |

#### OpenFont COLRv1 字体

该特性支持 OpenFont COLRv1 字体规范。这样就可以使用 CSS `@font-face` 规则或 CSS 字体加载 API 来加载带有渐变、合成和混合特性的压缩友好型彩色矢量字体。详情请参见 Firefox bug 1740530。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 105 | 否 |
| 开发者版 | 105 | 否 |
| Beta | 105 | 否 |
| 发行版 | 105 | 否 |
| 首选项名称 | `gfx.font_rendering.colr_v1.enabled` |

#### CSS 属性和值 API

CSS 属性和值 API 允许开发人员通过 JavaScript 中的 `registerProperty()` (en-US)或 CSS 中的 `@property` 规则注册自定义 CSS 属性。使用这两种方法注册属性时，可以进行类型检查、设置默认值，以及设置是否从父元素继承值。详情请参见 Firefox bug 1840480。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 116 | 是 |
| 开发者版 | 116 | 否 |
| Beta | 116 | 否 |
| 发行版 | 116 | 否 |
| 首选项名称 | `layout.css.property-and-value-api.enabled` |

#### CSS 自定义高亮 API

CSS 自定义高亮 API 为文档中任意文本范围的样式化提供了一种机制（概括了其他高亮伪元素的行为，如 `::selection`、`::spelling-error`、`::grammar-error` 和 `::target-text`）。这些范围在 JavaScript 中使用 `Range` 实例进行定义，这些实例在 `Highlight` (en-US) 中分组，然后使用 `HighlightRegistry` (en-US) 注册名称。CSS `::highlight` (en-US) 伪元素用于为已注册的高亮应用样式。详情请参见 Firefox bug 1703961。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 117 | 是 |
| 开发者版 | 117 | 否 |
| Beta | 117 | 否 |
| 发行版 | 117 | 否 |
| 首选项名称 | `dom.customHighlightAPI.enabled` |

### Service Worker

#### 在导航时预加载 service worker 资源

`NavigationPreloadManager` (en-US) 接口可用于在导航至页面时启用资源预加载。预加载与 Worker 启动同时进行，从而缩短了从开始导航到获取资源的总时间。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 99 | 是 |
| 开发者版 | 97 | 否 |
| Beta | 97 | 否 |
| 发行版 | 97 | 否 |
| 首选项名称 | `dom.serviceWorkers.navigationPreload.enabled` |

### WebVR API

#### WebVR API（已禁用）

已废弃的 WebVR API 即将被移除。在所有版本中默认禁用该 API。（Firefox bug 1750902）

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 98 | 否 |
| 开发者版 | 98 | 否 |
| Beta | 98 | 否 |
| 发行版 | 98 | 否 |
| 首选项名称 | `dom.vr.enabled` |

### HTML DOM API

#### Popover API

Firefox 现在支持 Popover API (en-US)。

以下 Web API 现在已经得到实现：

* `HTMLButtonElement.popoverTargetElement` (en-US) 和 `HTMLButtonElement.popoverTargetAction` (en-US)。
* `HTMLInputElement.popoverTargetElement` (en-US) 和 `HTMLInputElement.popoverTargetAction` (en-US)。
* `HTMLElement.popover` (en-US)、`HTMLElement.hidePopover()` (en-US)、`HTMLElement. showPopover()` (en-US) 和 `HTMLElement.togglePopover()` (en-US)。
* `HTMLElement` `beforetoggle` 事件 (en-US)、`HTMLElement` `toggle_event` 事件 (en-US) 和 `ToggleEvent` (en-US)。

CSS 更新包括：

* `:popover-open` (en-US)
* `::backdrop` 已经得到扩展以支持 popover。

以下 HTML 全局属性得到了支持：

* `popovertarget`
* `popovertargetaction`

参见 Firefox bug 1823757 以获取更多细节。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 114 | 否 |
| 开发者版 | 114 | 否 |
| Beta | 114 | 否 |
| 发行版 | 114 | 否 |
| 首选项名称 | `dom.element.popover.enabled` |

#### HTMLMediaElement 方法：setSinkId()

`HTMLMediaElement.setSinkId()` (en-US) 允许你在 `HTMLMediaElement` 上设置音频输出设备的 sink ID，从而更改音频的输出位置。详情请参见 Firefox bug 934425。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 64 | 否 |
| 开发者版 | 64 | 否 |
| Beta | 64 | 否 |
| 发行版 | 64 | 否 |
| 首选项名称 | `media.setsinkid.enabled` |

#### HTMLMediaElement 属性：audioTracks 和 videoTracks

启用此特性可为所有 HTML 媒体元素添加 `HTMLMediaElement.audioTracks` 和 `HTMLMediaElement.videoTracks` 属性。不过，由于 Firefox 目前不支持多音频和视频音轨，这些属性的最常见用例不起作用，因此默认情况下它们都被禁用。详情请参见 Firefox bug 1057233。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 33 | 否 |
| 开发者版 | 33 | 否 |
| Beta | 33 | 否 |
| 发行版 | 33 | 否 |
| 首选项名称 | `media.track.enabled` |

#### ClipboardItem

现在支持 `Clipboard API` 的 `ClipboardItem` (en-US) 接口，`Clipboard.write()` 接受`剪贴板项` (en-US)序列，而不是之前实现的`dataTransfer 对象`。它可在首选项前缀 `dom.events.asyncClipboard.clipboardItem`（即之前的 `dom.events.asyncClipboard.dataTransfer`）使用。详情请参见 Firefox bug 1619947。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 87 | 否 |
| 开发者版 | 87 | 否 |
| Beta | 87 | 否 |
| 发行版 | 87 | 否 |
| 首选项名称 | `dom.events.asyncClipboard.clipboardItem` |

#### ClipboardRead

`Clipboard`接口的 Clipboard.read() (en-US) 方法现在也可在 `dom.events.asyncClipboard.read` 首选项设置下使用，而以前则在 `dom.events.asyncClipboard.clipboardItem` 首选项设置下使用。（详情请参见 Firefox bug 1701512）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 90 | 否 |
| 开发者版 | 90 | 否 |
| Beta | 90 | 否 |
| 发行版 | 90 | 否 |
| 首选项名称 | `dom.events.asyncClipboard.read` |

#### HTML 净化 API

`HTML Sanitizer API` (en-US) 允许开发人员获取不受信任的 HTML 字符串，并对其进行净化，以便安全地插入到文档的 DOM 中。目前仍在考虑每个配置属性中的默认元素（需要进行净化的元素）。因此，配置参数尚未实现（请参阅`构造函数` (en-US)获取更多信息）。详情请参见 Firefox bug 1673309。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 84 | 否 |
| 开发者版 | 84 | 否 |
| Beta | 84 | 否 |
| 发行版 | 84 | 否 |
| 首选项名称 | `dom.security.sanitizer.enabled` |

#### GeometryUtils 方法：convertPointFromNode()、convertRectFromNode() 和 convertQuadFromNode()

`GeometryUtils` 方法 `convertPointFromNode()`、`convertRectFromNode()` 和 `convertQuadFromNode()` 将给定的点、矩形或四边形从调用它们的 `Node` 映射到另一个节点。（详见 Firefox bug 918189）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 31 | 是 |
| 开发者版 | 31 | 否 |
| Beta | 31 | 否 |
| 发行版 | 31 | 否 |
| 首选项名称 | `layout.css.convertFromNode.enable` |

#### GeometryUtils 方法：getBoxQuads()

`GeometryUtils` 方法 `getBoxQuads()` 返回 `Node` 相对于任何其他节点或视口的 CSS 框。（详见 Firefox bug 917755）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 31 | 是 |
| 开发者版 | 31 | 否 |
| Beta | 31 | 否 |
| 发行版 | 31 | 否 |
| 首选项名称 | `layout.css.getBoxQuads.enabled` |

#### ElementInternals：表单相关自定义元素方法和属性

新增 `ElementInternals` (en-US) 属性和方法，允许自定义元素与表单交互：

* `form` (en-US) 属性可获取与元素相关联的表单。
* `labels` (en-US) 属性获取与元素关联的标签列表。
* `willValidate` (en-US)属性检查自定义表单元素是否会被验证。
* 如果需要，`setFormValue()` (en-US) 方法会设置净化值和用户输入的数据。

详见 Firefox bug 1556362、Firefox bug 1556373、Firefox bug 1556365、Firefox bug 1556449。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 95 | 是 |
| 开发者版 | 95 | 否 |
| Beta | 95 | 否 |
| 发行版 | 95 | 否 |
| 首选项名称 | `dom.webcomponents.formAssociatedCustomElement.enabled` |

### 付款请求 API

#### 首要付款处理

支付请求应用程序接口支持在网页内容或应用程序中处理基于网络的支付。由于在用户界面测试过程中出现了一个错误，我们决定推迟发布该 API，同时讨论对 API 可能进行的修改。相关工作正在进行中。（详见 Firefox bug 1318984）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 55 | 否 |
| 开发者版 | 55 | 否 |
| Beta | 55 | 否 |
| 发行版 | 55 | 否 |
| 首选项名称 | `dom.payments.request.enabled` and`dom.payments.request.supportedRegions` |

### WebShare API

Web 分享 API (en-US) 允许从网站共享文件、URL 和其他数据。该特性在安卓系统的所有版本中均已启用，但在桌面系统中则需要指定首选项设置（除非另有说明）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 71 | 否 (default). 是 (Windows from version 92) |
| 开发者版 | 71 | 否 |
| Beta | 71 | 否 |
| 发行版 | 71 | 否 (Desktop). 是 (Android). |
| 首选项名称 | `dom.webshare.enabled` |

### 屏幕方向 API

#### ScreenOrientation.lock()

`ScreenOrientation.lock()` (en-US) 方法允许在设备支持和浏览器预锁定要求允许的情况下，将设备锁定为特定方向。通常只有在移动设备上全屏显示文档时才允许锁定方向。详见 Firefox bug 1697647。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 111 | 是 |
| 开发者版 | 97 | 否 |
| Beta | 97 | 否 |
| 发行版 | 97 | 否 |
| 首选项名称 | `dom.screenorientation.allow-lock` |

### 优先级任务调度 API

优先级任务调度 API (en-US) 提供了一种标准化的方法，可对属于应用程序的所有任务进行优先排序，无论这些任务是在网站开发人员的代码中定义的，还是在第三方库和框架中定义的。

Firefox Nightly（仅）从 Firefox 101 开始启用此特性。其他版本没有提供启用该特性的首选项。

### 通知 API

在 Windows 系统和 Nightly 版本中，通知的 `requireInteraction` 属性默认设置为 true（Firefox bug 1794475）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 117 | 是 |
| 开发者版 | 117 | 否 |
| Beta | 117 | 否 |
| 发行版 | 117 | Windows only |
| 首选项名称 | `dom.webnotifications.requireinteraction.enabled` |

安全与隐私
-----

### 在加密页面上阻止纯文本请求

为了帮助减轻由加密页面上的 Flash 内容引起的中间人攻击（MitM），已添加了一个首选项，将 `OBJECT_SUBREQUEST` 视为活动内容。详见 Firefox bug 1190623。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 59 | 否 |
| 开发者版 | 59 | 否 |
| Beta | 59 | 否 |
| 发行版 | 59 | 否 |
| 首选项名称 | `security.mixed_content.block_object_subrequest` |

### “不安全页面”标签

当页面以不安全方式加载（即使用 HTTP 而不是 HTTPS 加载）时，这两个首选项会在地址栏中传统的锁图标旁添加“不安全”文本标签。详见 Firefox bug 1335970。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 60 | 否 |
| 开发者版 | 60 | 否 |
| Beta | 60 | 否 |
| 发行版 | 60 | 否 |
| 首选项名称 | 普通浏览模式下：`security.insecure_connection_text.enabled`，隐私浏览模式下：`security.insecure_connection_text.pbmode.enabled` |

### 升级混合显示内容

启用此首选项设置后，Firefox 会在安全页面上自动将媒体内容请求从 HTTP 升级到 HTTPS。这样做的目的是防止出现混合内容的情况，即某些内容以安全方式加载，而其他内容则不安全。如果升级失败（因为媒体主机不支持 HTTPS），则不会加载媒体。（详见 Firefox bug 1435733）。

这也会更改控制台警告；如果升级成功，消息会显示请求已升级，而不是显示警告。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 84 | 是 |
| 开发者版 | 60 | 否 |
| Beta | 60 | 否 |
| 发行版 | 60 | 否 |
| 首选项名称 | `security.mixed_content.upgrade_display_content` |

### 权限策略 / 特性策略

权限策略 允许网络开发人员有选择地启用、禁用和修改浏览器中某些特性和 API 的行为。它与 CSP 类似，但控制的是特性而不是安全行为。请注意，在 Firefox 中实现的是**特性策略**，这是该规范早期版本中使用的名称。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 65 | 否 |
| 开发者版 | 65 | 否 |
| Beta | 65 | 否 |
| 发行版 | 65 | 否 |
| 首选项名称 | `dom.security.featurePolicy.header.enabled` |

### Clear-Site-Data“cache”指令

`Clear-Site-Data` HTTP 响应标头 `cache` 指令会清除请求网站的浏览器缓存。

**备注：** 这原本在默认情况下是启用的，但在版本 94（Firefox bug 1729291）中被置于首选项之后。


| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 63 | 否 |
| 开发者版 | 63 | 否 |
| Beta | 63 | 否 |
| 发行版 | 63 | 否 |
| 首选项名称 | `privacy.clearsitedata.cache.enabled` |

HTTP
----

### 默认 SameSite=Lax

`SameSite` cookie 的默认值为 `Lax`。在此设置下，只有当用户导航到原始站点时才会发送 cookie，而不会发送跨站点子请求以将图像或框架加载到第三方站点等。详见 Firefox bug 1617609。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 69 | 否 |
| 开发者版 | 69 | 否 |
| Beta | 69 | 否 |
| 发行版 | 69 | 否 |
| 首选项名称 | `network.cookie.sameSite.laxByDefault` |

### HTTP 状态码 103

服务器可能会发送 `103 Early Hints` HTTP 信息响应状态代码，以允许用户代理在服务器仍在准备完整响应时开始预加载资源。详见 Firefox bug 1813035。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 111 | 是 |
| 开发者版 | 111 | 是 |
| Beta | 111 | 是 |
| 发行版 | 102 | 否 |
| 首选项名称 | `network.early-hints.enabled` 和 `network.early-hints.preconnect.enabled` |

### Access-Control-Allow-Headers 通配符不包含 Authorization 标头

`Access-Control-Allow-Headers` 是 CORS 预检请求的响应标头，表示哪些请求标头可以包含在最终请求中。响应指令可包含通配符（`*`），表示最终请求可包含除 `Authorization` 标头以外的所有标头。

默认情况下，Firefox 在收到带有 `Access-Control-Allow-Headers: *` 的响应时会包含 `Authorization` 标头。将首选项设置为 `false` 可确保 Firefox 不包含 `Authorization` 标头。详见 Firefox bug 1687364。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 115 | 是 |
| 开发者版 | 115 | 是 |
| Beta | 115 | 是 |
| 发行版 | 115 | 是 |
| 首选项名称 | `network.cors_preflight.authorization_covered_by_wildcard` |

开发者工具
-----

Mozilla 的开发者工具在不断发展。我们会尝试新的想法，添加新的特性，并在 Nightly 和开发者版本渠道上进行测试，然后再通过测试版发布。以下是目前开发者工具的实验特性。

### 执行上下文选择器

该特性可在控制台命令行上显示一个按钮，让你更改输入表达式的执行环境。（详见 Firefox bug 1605154 和 Firefox bug 1605153）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 75 | 否 |
| 开发者版 | 75 | 否 |
| Beta | 75 | 否 |
| 发行版 | 75 | 否 |
| 首选项名称 | `devtools.webconsole.input.context` |

### 响应式设计模式中支持移动端手势

鼠标手势用于模拟移动手势，例如轻扫/滚动、双击和缩放，以及长按选择/打开上下文菜单。（详见 Firefox bug 1621781、Firefox bug 1245183 和 Firefox bug 1401304）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 76[1] | 是 |
| 开发者版 | 76[1] | 是 |
| Beta | 76[1] | 是 |
| 发行版 | 76[1] | 否 |
| 首选项名称 | n/a |

[1] Firefox 76 添加了对使用双击手势缩放的支持。其他手势是为 Firefox 79 添加的。

### 网络监视器中显示服务器发送事件

网络监控器会显示服务器发送事件的信息。（详见 Firefox bug 1405706）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 80 | 是 |
| 开发者版 | 80 | 是 |
| Beta | 80 | 否 |
| 发行版 | 80 | 否 |
| 首选项名称 | `devtools.netmonitor.features.serverSentEvents` |

### CSS 浏览器兼容性工具提示栏

CSS 规则视图可以在存在已知问题的 CSS 属性旁边显示浏览器兼容性工具提示。详见检查和编辑 HTML > 浏览器兼容性警告。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 81 | 否 |
| 开发者版 | 81 | 否 |
| Beta | 81 | 否 |
| 发行版 | 81 | 否 |
| 首选项名称 | `devtools.inspector.ruleview.inline-compatibility-warning.enabled` |

用户界面
----

### 桌面缩放

该特性可让你在桌面端实现流畅的捏合缩放，而无需像移动设备那样重新刷新布局。（详见 Firefox bug 1245183 和 Firefox bug 1620055）。

| 更新通道 | 添加的版本 | 默认启用？ |
| --- | --- | --- |
| Nightly | 42 | 是 |
| 开发者版 | 42 | 否 |
| Beta | 42 | 否 |
| 发行版 | 42 | 否 |
| 首选项名称 | `apz.allow_zooming`，Windows 中 `apz.windows.use_direct_manipulation` |

参见
--

* Firefox 开发者发行日志
* Firefox Nightly
* Firefox 开发者版本