今天发布了 Firefox 74 版本。本次更新最值得关注的功能是安全性的增强:功能策略、Cross-Origin-Resource-Policy
标头以及删除对 TLS 1.0/1.1 的支持。此外,我们还添加了一些新的 CSS 文本属性功能、JS 可选链操作符以及其他 2D 画布文本度量功能,以及一如既往的开发者工具改进和错误修复。
像往常一样,继续阅读以了解亮点,或查看以下文章中添加功能的完整列表
安全性改进
让我们看看 Firefox 74 版本的安全改进。
功能策略
我们终于默认启用了功能策略。现在,您可以使用 <iframe>
的 allow
属性和 HTTP 标头 Feature-Policy
来定义顶级文档和 iframe 的权限功能。以下是一些语法示例
<iframe src="https://example.com" allow="fullscreen"></iframe>
Feature-Policy: microphone 'none'; geolocation 'none'
CORP
我们还启用了对 Cross-Origin-Resource-Policy
(CORP) 标头的支持,允许网站和 Web 应用为某些跨源请求(例如来自 <img>
和 <script>
元素的请求)分配保护。这对于缓解旁路攻击(如 Spectre 和 Meltdown)以及跨站点脚本 (XSS) 攻击非常有用。
可用的值为 same-origin
和 same-site
。same-origin
仅允许共享相同方案、主机和端口的请求读取相关资源。这在一定程度上为 Web 提供了超出同源策略的额外保护。same-site
仅允许共享相同站点的请求。
要使用 CORP,您需要在标头中设置其中一个值,例如
Cross-Origin-Resource-Policy: same-site
删除 TLS 1.0/1.1
最后但同样重要的是,Firefox 74 删除了对 TLS 1.0/1.1 的支持,以帮助提高 Web 平台的整体安全性。这对 TLS 生态系统的进步至关重要,并且消除了由于 TLS 1.0/1.1 不够强大而存在的一系列漏洞。因此,有必要将其移除。
此更改于 2018 年 10 月首次宣布,是 Mozilla、Microsoft 和 Apple 共同发起的倡议。现在,在 2020 年 3 月,我们都兑现了自己的承诺(除了 Apple,他们稍晚会进行更改)。
这意味着您需要确保您的 Web 服务器从现在开始支持 TLS 1.2 或 1.3。请阅读TLS 1.0 和 1.1 删除更新,了解如何测试和更新您的 TLS/SSL 配置。从现在开始,Firefox 在连接到使用旧版 TLS 的服务器时将显示“安全连接失败”错误页面。安全连接失败。如果您尚未更新,请立即更新!
注意:在某些更新中(以及 Firefox ESR 中的更长时间内),“安全连接失败”错误页面将包含一个覆盖按钮,允许您在服务器尚未更新的情况下启用 TLS 1.0 和 1.1,但不要指望此功能能持续太久。
要详细了解 TLS 1.0/1.1 的删除及其背后的原因,请阅读TLS 1.0 和 TLS 1.1 的终结。
其他 Web 平台添加
Firefox 74 为您带来了更多 Web 平台添加。
新的 CSS 文本功能
首先,text-underline-position
属性已默认启用。这有助于在特定上下文中定位应用于文本的下划线,以实现特定的排版效果。
例如,如果文本的书写模式为水平方向,则可以使用 text-underline-position: under;
将下划线放置在所有后代元素下方;这对于确保化学和数学公式的可读性很有用,因为这些公式经常使用下标。
.horizontal {
text-underline-position: under;
}
在具有垂直writing-mode
书写模式的文本中,我们可以使用 left
或 right
值,使下划线根据需要出现在文本的左侧或右侧。
.vertical {
writing-mode: vertical-rl;
text-underline-position: left;
}
此外,text-underline-offset
和 text-decoration-thickness
属性现在接受百分比值,例如
text-decoration-thickness: 10%;
对于这些属性,百分比是当前字体大小的 1em
的百分比。
JavaScript 可选链
现在,我们有了 JavaScript 的可选链操作符 (?.
)。当您尝试按顺序访问一个对象中的另一个对象时,它允许您隐式检查第一个对象是否存在,从而避免错误并避免显式编写验证代码。
let nestedProp = obj.first?.second;
新的 2D 画布文本度量
TextMetrics
API(使用 CanvasRenderingContext2D.measureText()
方法获取)已扩展为包含四个新的属性,用于测量实际边界框 (actualBondingBox):actualBoundingBoxLeft
、actualBoundingBoxRight
、actualBoundingBoxAscent
和 actualBoundingBoxDescent
。
例如
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const text = ctx.measureText('Hello world');
text.width; // 56.08333206176758
text.actualBoundingBoxAscent; // 8
text.actualBoundingBoxDescent; // 0
text.actualBoundingBoxLeft; // 0
text.actualBoundingBoxRight; // 55.733333333333334
开发者工具添加
以下是开发者工具添加的功能。
设计模式下的类似设备渲染
尽管Firefox for Android 正在使用GeckoView 重新发布,以获得更快的速度和隐私,但开发者工具必须保持领先地位。移动设备测试应尽可能减少摩擦,无论是在桌面电脑上使用响应式设计模式 (RDM) 还是在设备上使用远程调试。
为了让开发者能够在没有手边设备的情况下信任结果,响应式设计模式必须尽可能正确地工作。在最近的版本中,我们实施了重大改进,以确保meta viewport 与触摸模拟一起正确应用。这与改进的设备预设相关,这些预设会自动为移动设备启用触摸模拟。
有趣的是,团队使这种模拟非常精确,以至于它已经能够识别和修复 Firefox for Android 的渲染错误。
开发者提示:通过工具菜单或 Ctrl + Shift + M(在 Windows 上)或 Cmd + Opt + M(在 macOS 上)打开响应式设计模式,而无需使用开发者工具。
我们希望在您使用 RDM 或在 Android 手机上使用Firefox Nightly for Developers 浏览您的网站后了解您的体验。
有用的 CSS 工具
关于非活动 CSS 规则的页面检查器中的新上下文警告收到了很多积极的反馈。它们可以帮助您解决复杂的 CSS 问题,同时向您展示级联样式表规则的复杂相互依赖关系。
自发布以来,我们一直在不断调整和添加规则,这些规则通常基于用户的反馈。在 74 版中,我们可以重点介绍一种新的检测配置,该配置会在属性依赖于定位元素时向您发出警告,主要是z-index
、top
、left
、bottom
和right
。
您的反馈和意见将有助于我们完善和扩展规则。在Mozilla Matrix 实例上的 DevTools 聊天中向团队打招呼Mozilla Matrix 实例,或通过@FirefoxDevTools关注我们的工作。
嵌套工作线程调试
Firefox 的JavaScript 调试器团队在最近的版本中专注于优化Web Worker,以便更轻松地进行检查和调试。开发人员和框架越使用 Worker 将处理从主线程中分离出来,浏览器就越容易优先处理因用户操作而触发的正在执行的代码。
现在,调试器会显示嵌套 Web Worker,允许 Worker 生成和控制其自己的 Worker 实例
改进的 React DevTools 集成
React 开发者工具插件
是许多与 Firefox 开发者工具紧密集成的开发者插件之一。借助WebExtensions API,开发者可以从同一代码库为所有浏览器构建和发布插件。
与 React 插件维护人员合作,我们正在努力重新启用和改进插件的上下文菜单,包括“转到定义”。此操作允许开发者从 React 组件直接跳转到调试器中的源文件。对于在检查器中跳转到元素,此功能已经启用。我们希望进一步开发它,以便框架工作流与其他工具完美对齐。
开发者版中的开发者功能抢先体验
开发者版
是 Firefox 的预发布渠道,可提供对工具和平台功能的抢先体验。它的配置还允许为开发者默认启用更多功能。我们希望尽快将新功能引入开发者版,以收集您的反馈,包括以下亮点。
控制台表达式的即时评估
使用即时评估来探索 JavaScript 和 DOM 对象和函数似乎很神奇。只要在Web 控制台中键入的表达式没有副作用,就会在您键入时预览其结果,这使您可以比以往更快地识别和修复错误。
调试器和控制台的异步堆栈跟踪
现代 JavaScript 编程在很大程度上依赖于async
/await
堆栈,以及其他异步操作,如事件、Promise 和超时。由于与 JavaScript 引擎的更好集成,现在可以捕获异步执行以提供更完整的画面。
调试器中的异步调用堆栈允许您遍历随着时间推移而执行的事件、超时和基于 Promise 的函数调用。在控制台中,异步调用堆栈使您可以轻松找到错误的根本原因。
服务工作线程调试一瞥
它已经在 Nightly 中存在一段时间了,我们非常高兴很快就能将其提供给您。请在 4 周内成为开发者版的 Firefox 76 中期待它。
关于 Chris Mills
Chris Mills 是 Mozilla 的高级技术作家,他撰写有关开放式 Web 应用、HTML/CSS/JavaScript、A11y、WebAssembly 等方面的文档和演示。他喜欢捣鼓 Web 技术,并在会议和大学偶尔进行技术演讲。他曾为 Opera 和 W3C 工作,喜欢演奏重金属鼓和喝好啤酒。他和他的妻子以及三个可爱的孩子住在英国曼彻斯特附近。