现在是…… Firefox 84

随着 12 月份为这个非凡的一年拉下帷幕,还剩下一个 Firefox 版本有待发布。Firefox 84 包含一些有趣的新功能,包括选项卡顺序检查、`:`not()` 中的复杂选择器支持、`PerformancePaintTiming` API 等等!

这篇文章只提供了一些重点内容;如需了解所有细节,请查看以下内容

DevTools 获得选项卡顺序检查

这次,Firefox 开发者工具为 无障碍检查器 添加了一个相当不错的功能——“显示选项卡顺序”复选框。选中此选项后,将切换一个可视化叠加层,显示当前页面上选项卡顺序或表格项。这提供了对使用 Tab 键导航页面方式的高级概述,这可能比简单地遍历元素更有效地突出显示问题。

a web page with multiple tabbable items showing the tab order for those items visuallly

Web 平台添加

Firefox 84 带来了 Gecko 平台的一些新添加内容,以下是其中的一些重点。

`:not()` 中的复杂选择器支持

`:`not()` 伪类非常有用,它允许您将样式应用于不匹配一个或多个选择器的元素。例如,以下代码将蓝色背景应用于除段落以外的所有元素

:not(p) {
  background-color: blue;
}

但是,它在最近一段时间内用处有限,因为它不允许使用任何类型的复杂选择器进行否定。Firefox 84 添加了对此的支持,因此您现在可以执行以下操作

:not(option:checked) {
  color: #999;
}

这将为当前未选中的 `<select>` 选项设置不同的文本颜色。

PerformancePaintTiming

Paint Timing API 的 `PerformancePaintTiming` 接口提供有关网页构建期间“绘制”(也称为“渲染”)操作的计时信息,这对希望开发自己的性能工具的开发人员来说非常有用。

例如

function showPaintTimings() {
  if (window.performance) {
    let performance = window.performance;
    let performanceEntries = performance.getEntriesByType('paint');
    performanceEntries.forEach( (performanceEntry, i, entries) => {
      console.log("The time to " + performanceEntry.name + " was " + performanceEntry.startTime + " milliseconds.");
    });
  } else {
    console.log('Performance timing isn\'t supported.');
  }
}

在支持的浏览器中将输出类似于以下内容

The time to first-paint was 2785.915 milliseconds.
The time to first-contentful-paint was 2787.460 milliseconds.

AppCache 移除

AppCache 尝试创建一个解决方案,用于离线缓存 Web 应用程序资产,以便在没有网络连接的情况下继续使用该网站。这似乎是一个好主意,因为它非常易于使用,并且可以轻松解决这一常见问题。但是,它对您尝试执行的操作做出了许多假设,然后在您的应用程序没有完全遵循这些假设时就出现了故障。

浏览器供应商一直在计划将其移除相当长的时间,从 Firefox 84 开始,我们终于彻底摆脱了它。对于创建离线应用程序解决方案,您应该使用 Service Worker API

WebExtensions

从 Firefox 84 开始,用户将能够通过附加组件管理器 管理已安装附加组件的可选权限

web extensions permissions dialog showing that you cna turn optional permissions on an off via the UI

我们建议使用可选权限的扩展程序监听 `browser.permissions.onAdded``browser.permissions.onRemoved` API 事件。这确保扩展程序了解用户授予或撤销可选权限。

此外,扩展程序开发人员现在可以使用 Ctrl + 滚轮(macOS 上为 Cmd + 滚轮) 缩放扩展程序面板、弹出窗口和侧边栏

我们还修复了一个问题,即在某些情况下,在卸载附加组件时,搜索引擎更改不会被重置

WebRender 进入 Linux 和 Android

在我们 之前的 Firefox 版本 中,我们为我们的 WebRender 渲染架构添加了许多新的 Windows 和 macOS 版本的支持。这次,我们很高兴地宣布为一部分 Linux 和 Android 设备添加了支持。具体来说,我们已在以下设备上启用 WebRender:

  • 基于 Gnome、X11 和 GLX 的 Linux 设备。
  • Android Mali-G GPU 系列手机(占 Fenix 发布人群的约 27%)。

我们正稳步接近为每个人提供 60fps 网页的梦想。

Localhost 改进

最后但同样重要的是,我们要提醒您,我们在版本 84 中对 Firefox 处理 localhost URL 的方式进行了一些重大改进。Firefox 现在确保 localhost URL(如 *http://localhost/* 和 *http://dev.localhost/*)引用本地主机环回接口(例如 http://127.0.0.1)。

因此,从 localhost 加载的资源现在被假定为已安全交付(请参阅 安全上下文),并且也不会被视为 混合内容。这对简化不同 Web 功能的本地测试有许多影响,尤其是对于那些需要安全上下文(如服务工作者)的功能。

关于 Chris Mills

Chris Mills 是 Mozilla 的高级技术作家,负责编写有关开放 Web 应用程序、HTML/CSS/JavaScript、A11y、WebAssembly 等方面的文档和演示。他喜欢用 Web 技术捣鼓,并且偶尔会在会议和大学进行技术演讲。他曾为 Opera 和 W3C 工作,喜欢演奏重金属鼓和品尝美味的啤酒。他住在英国曼彻斯特附近,与他的妻子和三个美丽的孩子生活在一起。

更多 Chris Mills 的文章……


12 条评论

  1. Stephan Sokolow

    对于创建离线应用程序解决方案,您应该使用 Service Worker API。

    我想我不会创建或使用离线应用程序解决方案了。

    我在很久以前就禁用了 about:config 中的服务工作者(并在 user.js 中将其锁定),因为缺少 NoScript 模拟。除了游戏之外,Web 浏览器已经是我的系统中运行最重的交互式内容,而且差距很大。

    2020 年 12 月 15 日 下午 12:48

  2. Ty

    他们应该专注于 YouTube 的那些问题。我真的很厌倦了在观看 1080p 以上的任何更重的视频时不得不切换到 Chrome,而且评论区经常加载很长时间,或者根本没有出现。

    2020 年 12 月 15 日 下午 6:15

    1. Eamon

      @Ty - youtube 应该可以正常工作;它在我的各种机器上都能正常工作,包括 4k 视频。您可能遇到了一些附加组件问题,而且这类问题往往取决于 GFX 管道设置的细节,因此即使您遇到的问题是 Firefox 特定的,也可能需要详细说明您的操作系统、GPU 以及任何不寻常的显示驱动程序设置才能解决问题。

      (但一定要尝试在没有附加组件的干净配置文件上重现它,以隔离该因素)

      2020 年 12 月 16 日 上午 2:45

  3. zakius

    好的,所以可选权限已经到位,现在是时候允许 ContentScripts 在 Mozilla 页面、由扩展程序生成的页面和内部页面上运行了(除了扩展程序管理,只是为了确保万无一失)。
    没有它,只有 WebExtensions 的产品仍然毫无用处。
    即使有了它,这也仅仅是一个更大问题的权宜之计。

    2020 年 12 月 16 日 上午 0:54

    1. Klaster_1

      我赞同这个观点,当我在某个页面上突然无法使用手势时,我真的感到很沮丧,尤其是当使用鼠标滚轮切换选项卡时,其中一个选项卡是内部页面,而手势就停止了。

      2020 年 12 月 17 日 上午 3:40

  4. Al

    感谢 Chris 的更新!

    2020 年 12 月 16 日 上午 5:06

  5. Eugene

    他们修复了我的电脑上运行的太多进程导致卡死的问题。曾经有一段时间,Firefox 运行得很流畅,并且打开了大量选项卡。

    2020 年 12 月 16 日 上午 8:15

  6. Mark

    当我尝试打开磁力链接时,如何关闭屏幕顶部那个烦人的弹出窗口,真的很烦人。

    2020 年 12 月 18 日 上午 2:00

  7. Simon

    我在本地 IP 网络地址 192.168.1.52 上运行了一个 Apache Web 服务器,并且有几个虚拟主机,例如 https://myserver.localhost。看来我无法再使用 Firefox 84 访问它们了。

    2020 年 12 月 18 日 上午 6:30

    1. Konstantinos Liakos

      >我在本地 IP 网络地址 192.168.1.52 上运行了一个 Apache Web 服务器,并且有几个虚拟主机,例如 >https://myserver.localhost。看来我无法再使用 Firefox 84 访问它们了。

      +1

      2020 年 12 月 18 日 上午 9:23

  8. Simon

    看来 Firefox 84 现在强制要求 TLD .localhost 来自 127.0.0.1。我不得不将所有虚拟域名更改为 .test

    2020 年 12 月 19 日 上午 03:04

  9. Denis

    对于那些遇到 *.localhost 强制解析为 127.0.0.1 的问题的人。

    请访问 about:config 并尝试将`network.proxy.allow_hijacking_localhost` 设置为 `true`。

    对我来说有效。

    2021 年 1 月 4 日 上午 09:16

本文评论已关闭。