Firefox 75: 4 月目标

即使在当前隔离时期,我们的工程团队也已经适应了,专注并努力工作,为世界带来了另一个激动人心的新版 Firefox。在开发者工具方面,从现在开始,我们会找到一个控制台中的即时评估系统、用于 WebSockets 的事件断点,以及更多其他内容。

在 Web 平台方面,新添加的功能包括用于图像的 HTML 延迟加载、CSS 的 min()max()clamp() 函数、public static class 字段以及对 Web 动画 API 的其他改进。

与往常一样,请继续阅读以了解最突出的内容,或查看以下文章中的完整添加列表

对开发者工具的添加

让我们从查看 75 版本开发者工具中最有趣的添加开始。

即时评估控制台表达式

La captura de pantalla muestra la consola web con una evaluación instantánea de las expresiones de la consola.

控制台 中评估表达式是一种快速分析应用程序状态、检查 DOM 或只是测试 JavaScript API 的方法。
现在,使用 Firefox 控制台的多行模式 更容易对更长的代码进行原型设计,该模式的使用越来越舒适,更类似于一个真正的开发环境。

新的即时评估系统 预览 正在写入的当前表达式的结果,类似于 Quokka.js 等编辑器。如果在控制台中输入的表达式没有产生副作用,那么在您键入时会预览其结果。

我们付出了很多努力,让预览尽可能流畅。DOM 节点的元素在结果中突出显示。代码自动完成工具根据结果类型推荐方法和属性。此外,您还可以预览错误,以便更快地更正表达式。

改进的检查和测量

区域测量现在可调整大小

一个屏幕截图显示了开发者工具中的区域测量工具,它允许您在页面上快速绘制矩形以测量特定区域的高度、宽度和对角线长度。 通过开发者工具中的可选 区域测量工具,您可以快速在页面上绘制矩形以测量特定区域的高度、宽度和对角线长度。您可以在设置中启用该工具,在“工具箱中可用的按钮”下。感谢 Sebastian Zartner [:sebo],这些矩形现在具有调整大小的控件,允许您精确地调整它们。

使用 XPath 查找 DOM 元素

自动化工具通常使用 XPath 查询 来指示软件要查找哪些元素以进行交互。再次感谢 sebo,您现在可以在 Inspector 的 HTML 搜索 中使用 XPath 来查找 DOM 元素。这使得在实际环境中更容易测试表达式并精确地调整查询。

用于 WebSockets 的事件断点

WebSockets 检查 功能在最近所有版本的开发工具中都得到了改进。这次,我们得到了对调试的很好的补充,这要归功于才华横溢的 Chujun Lu 的贡献。

现在,我们有了一个选项,可以在 WebSocket 事件处理程序执行时暂停或记录它们。使用调试器中最近添加的 事件侦听器断点。当您选择记录选项时,将保存事件数据和已执行的处理程序,而不会停止执行。WebSocket 检查器的其他改进包括消息过滤器现在支持正则表达式,这要归功于我们众所周知的合作者 Outvi V

网络添加

在提高 Firefox 75 的网络面板的质量和性能方面,我们已经做了很多工作。此版本在快速处理快速执行的并发请求方面取得了重大进展,而不会影响 CPU。

在界面方面,合作者 Florens Verschelde 领导了新列之间边框的建议和设计,旨在提高可读性。现在我们可以看到设计与开发工具的整体外观更加一致。由于合作者 Vitalii 的贡献,过滤器按钮也更具可读性,状态之间的对比度更好。

请求阻止面板用于测试站点在匹配的请求失败时的弹性。它现在允许使用“*”进行通配符模式。感谢 Duncan Dean 的贡献。

开发者工具中的抢先功能

Developer Edition 是 Firefox 的预发布渠道,它提供对新工具和平台功能的抢先体验。它的配置还默认情况下为开发人员提供了更多功能。我们很高兴能够快速将新功能引入 Developer Edition,以便我们可以了解您的反馈,例如以下突出显示的功能。

用于调试器和控制台的异步堆栈跟踪

现代 JavaScript 代码很大程度上依赖于 async/await 的使用,以及其他 异步操作,例如事件、承诺和计时器。由于与 JavaScript 引擎的更好集成,现在捕获了异步执行,以提供更完整的画面。

调试器中的异步调用堆栈允许您查看在不同时间执行的事件、计时器和基于承诺的函数调用。在控制台中,异步堆栈有助于查找错误的根本原因。

Web 平台更新

让我们来看看 Firefox 75 在 Web 平台更新方面为我们提供了什么。

用于图像的 HTML 延迟加载

延迟加载 是一种常见的提高性能的策略,它将资源识别为非阻塞(非关键)并仅在需要时加载它们,而不是立即加载所有资源。图像是在 Web 应用程序加载速度慢的主要原因之一。

为了更容易地延迟加载图像,我们引入了对 HTML 元素 <img> 中 load 属性的支持。将其值设置为 lazy 将指示浏览器延迟加载屏幕外图像,直到用户滚动到它们附近。另一个可能的唯一值为 eager,这是默认值,正如预期的那样。

<img src="image.jpg" loading="lazy" alt="..." />

您可以通过检查其布尔值 complete 属性的值来确定特定图像是否已完成加载。注意:load 事件在所有带有 eager 属性的内容加载完成后执行。在这一点上,可能会(甚至很可能)有延迟加载的图像在屏幕内但尚未加载。

注意:Chrome 还实现了对 <iframe> 内容延迟加载的实验性支持,但这还不是标准。我们这边,我们正在等待它标准化。

CSS min()max()clamp()

本月有一些令人兴奋的新 CSS 添加!我们添加了对三个非常有用的 CSS 函数的支持,尽管它们密切相关,但具有不同的目的

  • min() — 接受一个或多个可能的值或计算,并确保在所有情况下使用的值是所有可能性中最小的那个。在实践中,这为响应式设计提供了一系列值,以及一个允许的最大值。
  • max() — 接受一个或多个可能的值或计算,并确保在所有情况下使用的值是所有可能性中最大的那个。在实践中,这为响应式设计提供了一系列值,以及一个允许的最小值。
  • clamp() — 接受三个值或计算:最小值、首选值和最大值。如果计算出的值低于最小值或高于最大值,则将使用最小值或最大值。如果计算出的值介于两者之间,则将使用首选值。这允许属性的值适应它所分配的元素或页面的变化,同时仍然保持在最小值和最大值之间。

这些函数对于响应式设计非常有用,并且可以节省时间和代码,以以前的方式执行操作,这些操作以前可以使用 min-widthwidthmax-width 的组合、多个 媒体查询 甚至 JavaScript 来完成。

CSS min()max()clamp() 实际应用

让我们研究以下示例

html { font-family: sans-serif; } body { margin: 0 auto; width: min(1000px, calc(70% + 100px)); } h1 { letter-spacing: 2px; font-size: clamp(1.8rem, 2.5vw, 2.8rem) } p { line-height: 1.5; font-size: max(1.2rem, 1.2vw); }

这里,我们将 body 的宽度设置为 min(1000px, calc(70% + 100px)),这意味着在更宽的视窗中,body 的内容将具有 1000px 的宽度。在更窄的视窗中,body 的内容将是视窗宽度的 70% 加上 100px(直到此计算结果为 1000px 或更大)。

最高级别的标题的字体大小设置为 clamp(1.8rem, 2.5vw, 2.8rem)。因此,它将具有 1.8rem 的最小值和 2.8rem 的最大值。在这两个值之间,将使用 2.5vw 的理想值,因此我们将看到标题文本随着视窗宽度增长而增长,并在 2.5vw 计算结果大于 1.8rem 但小于 2.8rem 的视窗宽度处缩小。

段落的字体大小设置为 max(1.2rem, 1.2vw),这意味着它将具有 1.2rem 的最小值。但是,当 1.2vw 的计算值大于 1.2rem 的计算值时,它将开始增长。

您可以在我们的 简单 min()max()clamp() 示例 中看到这一点。

JavaScript 语言功能

在 75 版本中,JavaScript 有了一些有趣的添加。

首先,我们现在有了 公共静态类字段。当我们希望一个字段只对类存在一次,而不是对创建的每个类实例存在一次时,它们很有用。这对于缓存、固定配置或任何其他不需要在所有实例中复制的信息特别有用。基本语法如下所示

class ClassWithStaticField { static staticField = &apos;static field&apos; } console.log(ClassWithStaticField.staticField) // expected output: "static field"​

接下来,我们对国际化 (i18n) 功能进行了另一项改进,添加了 Intl.Locale,这是一个内置的标准构造函数,它表示 Unicode 区域设置标识符。例如,您可以为韩语创建一个区域设置对象,如下所示

const korean = new Intl.Locale(&apos;ko&apos;, { script: &apos;Kore&apos;, region: &apos;KR&apos;, hourCycle: &apos;h24&apos;, calendar: &apos;gregory&apos; });

然后,它将按预期返回对象属性

console.log(korean.hourCycle, japanese.hourCycle); // expected output: "h24" "h12"

表单添加

我们在 Firefox 75 中有一些针对表单 API 的有用添加。

  • HTMLFormElement 接口现在有一个新方法,requestSubmit()。与旧的(仍然可用的)submit() 方法不同,requestSubmit() 就像点击了特定的提交按钮一样,而不是简单地将表单数据发送到接收者。因此,它会触发 submit 事件,并在发送数据之前检查表单的有效性。
  • submit 事件现在由一个类型为 SubmitEvent 的对象表示,而不是简单的 EventSubmitEvent 包含一个新的属性 submitter,它返回用于触发表单提交的 Element。有了这个事件,我们可以为提交事件提供一个单一的处理程序,该处理程序可以区分用于提交表单的多个提交按钮或链接中的哪一个。

Web 动画 API 改进

在 75 版中,我们添加了一系列新的 Web 动画 API 功能,使这项规范变得更加有趣和有用。

具有隐式开始或结束的关键帧

现在,您可以在动画(即单个关键帧)中设置一个开始状态或结束状态。然后,浏览器将推断动画的另一端,如果可能的话。例如,让我们看看 这个简单的动画:关键帧对象如下所示

let rotate360 = [ { transform: &apos;rotate(360deg)&apos; } ];

我们只指定了动画的结束状态,而开始状态是隐式的。

自动删除填充动画

您可以在同一个元素上触发大量动画。如果它们是无限的(即向前填充),则可能会生成一个巨大的动画列表,这会导致内存溢出。因此,我们已经实现了 Web 动画规范的一部分,它会自动删除向前填充动画,除非开发人员明确指示希望保留它们。

您可以在我们的 简单无限动画替换演示 中看到这一点。涉及的 JavaScript 功能如下

  • animation.commitStyles() - 运行此方法以确认动画在正在动画的元素上的最终样式状态,即使该动画已被删除。这将导致最终样式状态以样式属性的形式写入正在动画的元素。
  • animation.onremove - 允许运行一个在动画被删除时触发的事件处理程序(即它处于活动替换状态)。
  • animation.persist() - 当您希望明确保留动画时,您应该调用 persist()
  • animation.replaceState - 返回动画的替换状态。如果动画已被删除,这将是 active,或者如果已调用 persist(),则为 persisted

时间线

Animation.timeline 获取器或 Document.timelineDocumentTimelineAnimationTimeline 函数现在默认启用,这意味着您现在可以访问动画的时间线信息。这对于以同步目的返回时间值非常有用。

默认情况下,动画的时间线和文档的时间线是相同的。

获取活动动画

最后但并非最不重要的是,Document.getAnimations()Element.getAnimations() 方法现在默认启用。它们分别返回完整文档或特定元素中所有活动动画的数组。

ARIA 注释

在 Firefox 75(在 Linux 和 Windows 上),您将看到对一组新的可访问性功能的支持,这些功能统称为 ARIA 注释,这些功能将在即将发布的 WAI-ARIA 1.3 规范版本中发布。这些功能使在网页文档中创建可访问的注释成为可能。常见的用例包括编辑建议(即对可编辑文档的添加和/或删除)和评论(例如,与正在审核的文档部分相关的编辑评论)。

屏幕阅读器目前尚不支持 ARIA 注释,但我们很快就可以使用这些新角色和其他属性。要查看示例和更多兼容性信息,请阅读 MDN 上的 ARIA 注释

浏览器扩展

WebExtensions API 中添加了两个新的 browserSettingszoomFullPage 用于放大页面中的文本,以及 zoomSiteSpecific,它确定缩放是否仅应用于活动选项卡或应用于同一站点的所有选项卡。

总结

就这样。我们在 Firefox 75 中添加了一些很酷的新功能。请务必查看并享受试用!像往常一样,请随时在评论中分享您的想法和问题。

关于 Chris Mills

Chris Mills 是 Mozilla 的高级技术作家,他编写有关开放式 Web 应用程序、HTML/CSS/JavaScript、A11y、WebAssembly 等的技术文档和演示文稿。他喜欢摆弄 Web 技术,并会在会议和大学偶尔做一些技术演讲。他曾为 Opera 和 W3C 工作,喜欢演奏重金属鼓和喝美味的啤酒。他和他的爱人以及三个美丽的女儿住在英国曼彻斯特附近。

Chris Mills 的更多文章…

Firefox 75:四月新气象

即使在这段隔离时期,我们的工程团队也已经调整好步调,保持专心并努力工作,并献上令人兴奋的新版 Firefox。在开发人员工具方面,您可以在网页主控台中使用即时求值、WebSockets 事件断点以及许多其他功能。在网页平台方面,新增的功能包括 HTML 延遲載入圖片、CSS min()max()clamp() 函数、公开静态类別属性以及支援網頁动画 API 附加功能等。

与往常一样,请点击下方阅读重点,或在下文浏览所有新增功能的完整列表:

新增开发人员工具

让我们先来看看 Firefox 75 中最有趣的开发人员新工具。

即时测试控制台表达式

螢幕截圖為網頁控制台進行表達式的即時測試

控制台 中测试表达式是了解应用程序状态、查询 DOM 或试用 JavaScript API 非常便捷的方法。现在,利用 Firefox 控制台的多行模式 使编寫较长的代码更为容易,在使用上更为友善,且更貼近整合開發環境。

新的 即时测试 可以在输入时预覽当前表达式的结果,有点类似 Quokka.js 编辑器。只要在 Web 控制台中键入的表达式没有副作用,在输入时便可以直接预覽结果。

为了使预覽尽可能无缝,需要花費很大的功夫。以当前的成果来说,DOM 节点的元素表现出色,而代码内自动完成功能也会根据结果类型推荐方法和属性。此外,更可以預覽错误以快速地修复表达式。

更佳的检查和測量方法

现在可以调整測量面积大小

螢幕截圖顯示DevTools中的面積測量工具,可以在頁面上快速繪製矩形以測量特定區域的高度、寬度和對角線長度。

使用 DevTools 中的選用 面积測量工具 可以在頁面上快速繪製矩形以測量特定區域的高度、宽度和对角线长度。在「可用的工具箱按鈕」的设置中可以启用该工具。感谢 Sebastian Zartner [:sebo],這些矩形现在具有调整大小的句柄,因此可以精準地進行调整。

利用 Xpath 查询 DOM 元素

Xpath 查询 通常用於自動化工具中,以告知软件要定位与互动 的元素。再次感谢 Sebo,现在可以利用 HTML 的页面檢测器搜索 以 XPath 来查询 DOM 元素。这使得在网站上实际测试表达式和修改變得更加容易。

WebSockets 的事件断点

在每个最新的 DevTools 版本中,WebSocket 检查 功能都持续进步。这次,天资聪颖的 Chujun Lu 在除錯方面做出了很大的貢獻。

在执行 WebSocket 事件处理程序时,您可以利用除錯器中新的 事件監聽器断点(Event Listener Breakpoints) 暂停或是记录。选择纪录选项后,事件数据和已執行的处理程序会被记录下来,但是不会暂停执行。

在 WebSocket Inspector 中,由于 Outvi V 长期的貢獻,消息過濾器现在可以支援一般的表达式。

网络新增功能

Firefox 75 在网络介面的质量和性能方面有大幅的進步。這個版本的渲染效能立下了新的里程碑,可以快速渲染同时发動的請求,又不增加 CPU 的負擔。

在介面方面,貢獻者 Florens Verschelde 提出了在列之间添加边框以提升可读性的建议和设计。這個設計使 DevTools 整体的外观更加一致。貢獻者 Vitalii 在改善状态之间的对比度后,篩选按钮也变得更清晰。

阻斷請求面板可協助測試匹配請求失敗時網站的彈性。现在,它允许包含 “ * ” 的萬用字源。感謝 Duncan Dean 的貢獻。

开发者版本中搶先體驗 DevTools 功能

开发者版本 是 Firefox 的預發布渠道,可以提早体验編程和平台功能。默認情況中,瀏覽器的設定提供開發人員了更多功能。我们希望尽快在开发者版本中加入新功能,并收集不同的反饋,包括以下重点。

除錯器和控制台的異步堆栈跟踪追蹤

现代的 JavaScript 編碼很大程度上取決於在其他 異步作業(例如:event、promise 和 timeout)之上堆疊 async/await。在與 JavaScript 引擎整合優化之後,现在異步作業得以提供更完整的服務。

利用除錯器中的異步堆棧可以逐步了解所執行的 event、timeout 和基於 promise 的函数调用。在控制台中,透過異步堆棧使查找错误的根本原因變得更加容易。

網頁平台更新

让我们看看 Firefox 75 网页平台方面的更新。

HTML 延遲載入圖片

延遲加載 是用來提升性能常用的一個策略。透過将资源标记为非阻塞(非关键)资源,并在需要时才加載,而不是立即加載所有资源。Web App 中延遲加載的最常见的资源之一為图片。

为了让延遲載入图片时在使用上更為簡便,我們提供支援HTML <img>元素的load屬性。只要將之設定為lazy,就可以使瀏覽器延遲載入尚未出現在畫面中的圖片,直到使用者快瀏覽到圖片時才加以載入。另一個屬性則是eager,也就是一般預設的屬性。

<img src="image.jpg" loading="lazy" alt="..." />

你可以透過檢查布林 complete屬性的值來確定圖片是否已完成加載。

注意:當網頁一次載入所有內容時,將觸發load事件。這時,畫面中可能尚未載入延遲加載的圖片。

注意:Chrome目前正在測試延遲加載<iframe>內容,但這尚未正式發行。

CSS min()max()clamp()

這個月增加了一些令人興奮的CSS新功能!我們開始支援三個非常實用的CSS函數,這些CSS函數彼此密切相關,但目的卻不同:

  • min() —接受一個或多個可能的值或運算以選擇,並確保在所有情況下使用的值都是最小可能的值。實作上,這提供響應式設計一系列的值以及最大允許值。
  • max() — 接受一個或多個可能的值或運算以選擇,並確保在所有情況下使用的值都是最大可能的值。實作上,這提供響應式設計一系列的值以及最小允許值。
  • clamp() — 接受三個值或運算:最小值,首選值和最大值。如果計算值低於最小值,則將使用最小值。如果計算值大於最大值,則將使用最大值。如果計算值介於兩者之間,則將使用首選值。這使屬性值適應所分配的元素或頁面中的變更,同時保持在最小值和最大值之間。

這些功能對於響應式設計來說非常實用,可以節省大量時間和代碼。先前可能需要同時運用min-widthwidth還有max-width,或是多媒體查詢,甚至JavaScript才能完成同樣的事情。

CSS min()max()clamp()實例

讓我們看看下方的例子:

html {
  font-family: sans-serif;
}
 
body {
  margin: 0 auto;
  width: min(1000px, calc(70% + 100px));
}
 
h1 {
  letter-spacing: 2px;
  font-size: clamp(1.8rem, 2.5vw, 2.8rem)
}
 
p {
  line-height: 1.5;
  font-size: max(1.2rem, 1.2vw);
}

我們這裡將body寬度設為min(1000px, calc(70% + 100px)),也就是說在較寬的視區中,body為1000px。在較窄的視區中,body為視區的70%,再加上100px(直到這個運算結果達到1000px以上)!

頂部標題的字體大小設置為clamp(1.8rem, 2.5vw, 2.8rem),所以最小值為1.8rem,最大值為2.8rem。在這個範圍區間,最適合的值為2.5vw。你可以看到標題會放大或縮小,因為2.5vw大於1.8rem,且小於2.8rem

段落的字體大小設置為max(1.2rem, 1.2vw),所以最小值為1.2rem。但是當1.2vw的值大於1.2rem的值時,字體則會開始放大。

你可以參閱此處min()max()clamp()簡易的實作

JavaScript功能

Firefox 75中新增了一些有趣的JavaScript功能。

首先,我們現在有公共靜態字段。如果你希望一個字段在每個類別中僅存在一次,而不存在於你所創建的每個類別的實例中時,這時就很有幫助。對於緩存,固定配置或不需要跨實例複製的其他資料很有用。基本語法如下:

class ClassWithStaticField {
  static staticField = 'static field'
}
 
console.log(ClassWithStaticField.staticField)
// expected output: "static field"​

接下來,我們透過加入Intl.Locale提升國際化(i18n)功能。Intl.Locale為標準的內置屬性,它代表Unicode語言環境標識符。你可以參考以下範例創建一個韓文語言環境對象:

const korean = new Intl.Locale('ko', {
  script: 'Kore', region: 'KR', hourCycle: 'h24', calendar: 'gregory'
});

然後依照預期返回對象的屬性:

console.log(korean.hourCycle, japanese.hourCycle);
// expected output: "h24" "h12"

表單元素功能

在Firefox 75中,我們添加了一些可用於表單API的實用功能:

  • HTMLFormElement介面有一個新的方法requestSubmit()。目前舊有的submit()方法仍可使用,不同的是requestSubmit()運作的方式就像點擊了指定的提交按鈕一樣,而不僅僅是將表單數據發送給收件人。因此,submit事件被提交了,而表單的有效性也在數據送出之前完成了檢查。
  • submit事件 event is now represented by an object of type SubmitEvent rather than a simple Event. SubmitEvent包含一個新的submitter屬性,該屬性會回傳一個觸發提交表單的元素。透過這個事件,你可以使用一個處理程序來掌管提交的事件,並判斷提交表單的按鍵或連結。

Web Animations API提升

在Firefox 75中,我們添加了許多新的Web Animations API功能,讓這個版本在使用上更加有趣和實用。

定義關鍵影格的起始和結束

從現在開始,你可以只定義動畫的起始和結束(例如:單個關鍵影格)。然後,瀏覽器會嘗試推斷動畫的結束。例如,請參考這個簡易動畫──關鍵影格物件如下所示:

let rotate360 = [
  { transform: 'rotate(360deg)' }
];

我們只有指定動畫的結束狀態,而瀏覽器自動推算了起始狀態。

自動移除填充動畫

同一元素可能會觸發大量動畫,所以如果動畫屬性為無限重複(例如:向前填充動畫),可能會導致動畫列表過大,進而造成記憶體流失。因此,我們根據Web動畫規範,自動刪除覆蓋的向前填充動畫,除非開發人員明確要求保留動畫。

在我們簡易的替換無限重複動畫範例中看到這個動作。相關JavaScript功能如下:

  • animation.commitStyles() — 執行這個方法將提交動畫的最終樣式狀態給要進行動畫的元素,即便該動畫已被刪除。最終樣式狀態會以樣式屬性中特性的形式寫入進行動畫的元素。
  • animation.onremove —允許你在動畫刪除時(例如:置換狀態)觸發事件處理器並加以執行。
  • animation.persist() — 當你確定希望保留動畫時,請調用persist()
  • 則此方法將處於活動狀態;如果已調用persist(),則將保留該屬性。

  • animation.replaceState — 返回動畫的置換狀態。如果動畫已刪除,會處於active狀態。如果已調用persist(),則會處於persisted狀態。

時間軸

預設模式中啟用了,Animation.timeline getter、Document.timelineDocumentTimelineAnimationTimeline功能,所以你現在可以取得動畫的時間軸信息。這個功能在回傳時間值以同步資料時非常實用。

在預設模式中,動畫和檔案的時間軸為一致的。

Getting active animations

最後,Document.getAnimations()Element.getAnimations()方法現在為預設。你可以返回檔案或特定元素中所有有效的動畫的陣列。

ARIA批註

在Windows和Linux上的Firefox 75中,你可以看到稱為ARIA批註的一組新輔助功能,目前預計於WAI-ARIA 1.3版規範中發布。透過ARIA批註可以在Web文檔中建立可訪問的註釋,常見的實例包括編輯建議(例如:在可編輯文檔中添加或刪除內容)以及評論(例如:審核中部分文檔的相關編輯評論)。

目前螢幕報讀器並未支援ARIA批註,但是不久後我們將能夠使用這些新角色和其他屬性。欲瞭解更多實例和其他細節,請閱讀MDN中的ARIA批註

瀏覽器擴充功能

WebExtensions API中的browserSettings新增了兩項新屬性:zoomFullPage可以放大網頁中的內文;zoomSiteSpecific可以只放大網頁中運作中的標籤,也可以放大網頁中所有的標籤。

總結

以上是我們在Firefox 75中新增的一些有趣的新功能;歡迎大家來體驗,祝大家玩得愉快!與往常一樣,歡迎隨時提供反饋並在評論區提出問題。check them out, and have fun playing!

关于 Chris Mills

Chris Mills 是 Mozilla 的高级技术作家,他编写有关开放式 Web 应用程序、HTML/CSS/JavaScript、A11y、WebAssembly 等的技术文档和演示文稿。他喜欢摆弄 Web 技术,并会在会议和大学偶尔做一些技术演讲。他曾为 Opera 和 W3C 工作,喜欢演奏重金属鼓和喝美味的啤酒。他和他的爱人以及三个美丽的女儿住在英国曼彻斯特附近。

Chris Mills 的更多文章…

Firefox 75:四月的远大志向

即使在隔离时期,我们的工程团队也努力适应、保持专注并努力工作,为您带来又一个令人兴奋的新版Firefox。在开发人员工具方面,您会找到控制台中的即时评估、WebSockets的事件断点,以及其他许多功能。在网络平台方面,新增的功能包括图像的HTML延迟加载、CSS min()max()clamp()函数、公共静态类字段以及对Web动画API支持的补充。

请照例阅读重点内容或从以下文章中找到所有新增内容的完整列表:

开发人员工具补充

我们首先来看看75最有趣的开发人员工具。

控制台表达式即时评估

屏幕快照显示了具有控制台表达式即时评估的Web控制台

控制台中的评估表达式是探索应用程序状态、查询DOM或试用JavaScript API的快速方法。现在,Firefox的多行控制台模式已经变得更友好、更像IDE,可用于更轻松地为更长的代码制作原型。

新的即时评估会在您键入时显示当前表达式的结果预览,类似于Quokka.js 这样的编辑器。只要在Web控制台中键入的表达式没有副作用,就会在您键入时显示结果预览。

为了使预览尽可能无缝,进行了大量改进。结果中DOM节点的元素为突出显示。代码内自动填写功能根据结果类型推荐方法和属性。另外,您可以预览错误以更快地修复表达式。

更好地检查和测量

面积测量现可调整大小

显示DevTools中的面积测量工具的屏幕快照,可让您快速在页面上绘制矩形以测量特定区域的高度、宽度和对角线长度。

使用DevTools中的可选面积测量工具,您可以在页面上快速绘制矩形以测量特定区域的高度、宽度和对角线长度。您可以在“可用工具箱按钮”下的设置中启用该工具。感谢Sebastian Zartner [:sebo],这些矩形现在有调整大小的句柄,方便您精确地调整。

使用XPath查找DOM元素

XPath查询通常用于自动化工具中,以告知软件要查找并与之交互的元素。您现在可以在Inspector的HTML搜索中将XPath用于DOM元素,这也是归功于sebo。这使得在实际站点上测试表达式和微调查询变得更加容易。

WebSocket的事件断点

最近的每个DevTools版本都对WebSocket检查功能进行了改进。这次,由于才华横溢的Chujun Lu的贡献,调试方面得到了一个不错的补充。

现在,您可以在执行WebSocket事件处理程序时选择暂停或记录。使用调试器中新添加的事件监听器断点。选择“记录”选项时,将记录事件数据和执行的处理程序,但执行不会暂停。

WebSocket Inspector的新消息还包括:由于Outvi V的长期贡献,消息过滤器现支持正则表达式。

网络添加

Firefox 75的“网络”面板中进行了大量质量和性能方面的工作。此版本中在不增加CPU负担的情况下大幅提升了发出快速请求的速度。

在界面方面,贡献者Florens Verschelde推进了在列之间添加边框以提高可读性的建议和设计。注意设计变得与DevTools的整体外观更加一致了。感谢贡献者Vitalii,过滤器按钮也更加清晰易读,状态之间的对比度得到了改善。

“请求阻止”面板可帮助您测试匹配请求失败时站点的恢复能力。现在,它允许带有“*”的通配符模式。感谢Duncan Dean所做的贡献。

Developer Edition(开发人员版)中DevTools功能抢先体验

Developer Edition是Firefox的预发布渠道,可以抢先体验各种工具和平台功能。该版本的默认设置中还为开发人员开启了更多的功能。我们喜欢将新功能快速引入到Developer Edition,以便收集反馈信息,重点包括以下内容。

调试器 & 控制台异步堆栈跟踪

现代JavaScript代码在很大程度上取决于在其他异步操作(如事件、承诺以及超时)之上堆叠async/await。由于与JavaScript引擎集成得好,现已可以捕捉到异步执行过程,以提供更完整的画面。

调试器中的异步调用堆栈使您可以单步调试事件、超时以及依照时间执行的基于承诺的函数调用。控制台的异步堆栈使查找错误的根本原因变得更为容易。

Web平台更新

我们来探讨一下Firefox 75在网络平台更新方面提供的功能。

图像的HTML延迟加载

延迟加载是通过将资源标识为非阻塞(非关键)资源、以仅在需要时加载而不是立即加载来提高性能的常见策略。图像是要在网络应用中延迟加载的最常见资产之一。

为了简化图像延迟加载,我们在HTML <img>元素上引入了对加载属性的支持。将值设置为lazy会指示浏览器推迟加载屏幕外的图像,直到用户滚动到附近为止。唯一可能的其他值为eager,如您所想,这是默认值。

<img src="image.jpg" loading="lazy" alt="..." />

您可以通过检查其布尔complete属性的值来确定给定图像是否已完成加载。

注意:当所有立即加载的内容都已加载时,会触发load事件。到那时,有一定可能(或者很可能)在即将加载的可视视口中有一些延迟加载的图像。

注意:Chrome还为<iframe>内容延迟加载提供了实验性支持,但还没有列入标准;我们正在等它标准化。

CSS min()max()clamp()

本月新增了一些令人兴奋的CSS新功能!我们对三个非常实用的CSS函数新增了支持,这几个CSS函数彼此密切相关,但目的不同:

  • min() — 接受一个或多个可能值或计算结果以供选择,并确保所有情况下使用的值都是可能值中最小的。这为响应式设计提供了一系列值以及最大允许值。
  • max() — 接受一个或多个可能值或计算结果以供选择,并确保所有情况下使用的值都是可能值中最大的。这为响应式设计提供了一系列值以及最小允许值。
  • clamp() — 接受三个值或计算结果:最小值、首选值和最大值。如果计算值低于最小值或高于最大值,则将使用最小值或最大值。如果计算值介于两者之间,则将使用首选值。这样,属性值就可以适应分配给它的元素或页面的变更,同时保持在最小值和最大值之间。

这些函数对于响应式设计非常实用,可用于进行您之前使用min-widthwidthmax-width、多个media queries、甚至JavaScript的组合进行的操作,并且可以节省大量时间、减少大量代码。

CSS min()max()clamp()的实际运行情况

我们来学习以下示例:

html {
  font-family: sans-serif;
}
 
body {
  margin:0 auto;
  width: min(1000px, calc(70% + 100px));
}
 
h1 {
  letter-spacing:2px;
  font-size: clamp(1.8rem, 2.5vw, 2.8rem)
}
 
p {
  line-height:1.5;
  font-size: max(1.2rem, 1.2vw);
}

在这里,正文宽度设置为min(1000px, calc(70% + 100px)),这意味着在更宽的视口中,正文内容将为1000px宽。在较窄的视口中,正文内容将为视口宽度的70%加<100px(直到此计算结果变为1000px或更高)!

顶层标题的字体大小设置为clamp(1.8rem, 2.5vw, 2.8rem)。因此,最小值为1.8rem,最大值为2.8rem。在这两个值之间,将使用2.5vw的理想值,因此如计算出2.5vw大于1.8rem,但小于2.8rem,您将看到标题文本随视口宽度增大和缩小。

段落字体大小设置为max(1.2rem, 1.2vw),这意味着它的最小值为1.2rem。但是,当code>1.2vw的计算值大于1.2rem的计算值时,它将开始增长。

您可以在我们的

<

h4>CSS min()max()clamp()简单示例中查看实际运行情况。

JavaScript语言功能

75中新添了一些有趣的JavaScript。

首先,我们现在有了公共静态类字段。如果您希望一个字段在每个类中仅出现在一次,而不是在您创建的每个类实例中都出现时,就可以使用这些选项。对于缓存、固定配置或不需要在实例之间复制的任何其他数据而言尤其实用。基本语法如下所示:

class ClassWithStaticField {
  static staticField = 'static field'
}
 
console.log(ClassWithStaticField.staticField)
// expected output: "static field"​

另外,我们通过添加Intl.Locale——一个代表Unicode语言环境标识符的标准内置构造函数——进一步增强了国际化(i18n)功能。例如,您可以创建一个韩语语言环境对象,如下所示:

const korean = new Intl.Locale('ko', {
  script:'Kore', region:'KR', hourCycle: 'h24', calendar: 'gregory'
});

然后返回对象的属性,如您所预期:

console.log(korean.hourCycle, japanese.hourCycle);
// expected output: "h24" "h12"

表单添加

在Firefox 75中,我们添加了一些实用的特定于表单的API:

  • HTMLFormElement接口具有一个新方法,即requestSubmit()。与旧的(仍然可用)submit()方法不同,requestSubmit()的行为就像单击了指定的提交按钮一样,而不仅仅是将表单数据发送给收件人。因此,在提交数据之前,会发送submit事件,并检查表单的有效性。
  • submit事件现在由类型为SubmitEvent的对象、而不是简单的Event表示。SubmitEvent包括一个新的submitter属性,它返回被调用以触发表单提交的Element。利用此事件,您可以将可识别出使用了哪个提交按钮或链接来提交表单的处理程序用于提交事件。

Web Animations API增强功能

在75中,我们添加了许多新的Web Animations API功能,使此规范更加有趣和实用。

从关键帧推算

从现在开始,您可以仅为动画设置开始或结束状态(即单个关键帧)。然后,如果浏览器具备相应能力,就可以推断动画的另一端。以这个简单的动画为例,关键帧对象看起来像这样:

let rotate360 = [
  { transform: 'rotate(360deg)' }
];

我们仅指定了动画的结束状态,就可以默示开始状态了。

自动删除填充动画

可以在同一元素上触发大量动画。如果元素为不确定的(即,向前填充),则可能会导致动画列表过大,从而造成内存泄漏。因此,我们实施了Web动画规范中自动取消覆盖前向填充动画的部分,除非开发人员明确指定保留动画。

您可以在我们简单的替换不确定动画演示中看到相关的实际运行情况。相关的JavaScript功能如下:

  • animation.commitStyles() — 运行此方法以将动画的最终样式状态提交给要动画化的元素,即使该动画已被删除也是如此。它将以样式属性内的属性形式将最终样式状态写入正在动画化的元素。
  • animation.onremove — 允许您运行在动画被删除时(即处于活动替换状态)触发的事件处理程序。
  • animation.persist() —当您明确希望保留动画时,调用persist()
  • animation.replaceState — 返回动画的替换状态。如果已删除动画,则将为active;如果已调用persist(),则将为persisted

时间轴

Animation.timeline getter、Document.timelineDocumentTimelineAnimationTimeline功能现在为默认启用,这意味着您现在可以访问动画的时间轴信息。此功能对于返回时间值以进行同步非常实用。

默认情况下,动画的时间轴和文档的时间轴相同。

获取活动动画

最后,Document.getAnimations()Element.getAnimations()方法现在为默认启用。您可以分别将它们用于返回整个文档或特定元素上所有活动动画的数组。

ARIA注释

在Firefox 75(Linux和Windows版本)上,我们新添了对一组新的辅助功能的支持,这些新功能统称为ARIA批注,将在即将发布的WAI-ARIA 1.3版规范中发布。这些功能使在Web文档中创建可访问注释成为可能。典型的用例包括编辑建议(即,在可编辑文档中进行添加和/或删除)和评论(例如,与正在审核的文档的一部分相关的编辑评论)。

目前还没有针对ARIA注释的屏幕阅读器支持,但是我们很快就能使用这些新角色和其他属性。有关示例和更多支持详细信息,请阅读MDN上的ARIA注释

浏览器扩展

两个新的browserSettings已添加到WebExtensions API: zoomFullPage用于放大页面上的文本,还有zoomSiteSpecific,可确定缩放是仅应用于活动选项卡还是同一网站的所有选项卡。

总结

就是这样了。我们为Firefox 75提供了有趣的新功能;赶快了解一下,从中寻找乐趣吧!和之前一样,欢迎您随时提供反馈并在评论中提出问题。

关于 Chris Mills

Chris Mills 是 Mozilla 的高级技术作家,他编写有关开放式 Web 应用程序、HTML/CSS/JavaScript、A11y、WebAssembly 等的技术文档和演示文稿。他喜欢摆弄 Web 技术,并会在会议和大学偶尔做一些技术演讲。他曾为 Opera 和 W3C 工作,喜欢演奏重金属鼓和喝美味的啤酒。他和他的爱人以及三个美丽的女儿住在英国曼彻斯特附近。

Chris Mills 的更多文章…