Firefox 68:BigInt、对比度检查和 QuantumBar

Firefox 68 现已推出,其功能包括对大整数的支持、整页对比度检查以及对 Firefox 核心功能(URL 地址栏)的全新实现。

这些仅仅是亮点。有关完整信息,请参阅

JavaScript 的 BigInt

Firefox 68 现在支持 JavaScript 的新数字类型 BigInt

Screenshot of the DevTools Console showing 2**64 with normal numbers and with BigInts. The screenshot shows how floating point numbers lose precision as they grow larger.

自推出以来,JavaScript 只有一个数字类型:Number。根据定义,JavaScript 中的数字是浮点数,这意味着它们可以表示整数(如 22451)和小数(如 6.28<a href="https://0.30000000000000004.com/" rel="nofollow">0.30000000000000004</a>)。但是,这种灵活性是有代价的:64 位浮点数无法可靠地表示大于 2 ** 53 的整数。

» 2 ** 53
9007199254740992

» (2 ** 53) + 1
9007199254740992  // <- Shouldn't that end in 3?

» (2 ** 53) + 2
9007199254740994

此限制使得处理非常大的数字变得困难。例如,这就是Twitter 的 JSON API 将推文 ID 作为字符串而不是文字数字返回的原因。

BigInt 使表示任意大的整数成为可能。

» 2n ** 53n  // <-- the "n" means BigInt
9007199254740992n

» (2n ** 53n) + 1n
9007199254740993n  // <- It ends in 3!

» (2n ** 53n) + 2n
9007199254740994n

JavaScript 不会在 BigInt 和 Number 之间自动转换,因此您不能在同一个表达式中混合使用它们,也不能将它们序列化为 JSON。

» 1n + 2
TypeError: can't convert BigInt to number

» JSON.stringify(2n)
TypeError: BigInt value can't be serialized in JSON

但是,您可以将 BigInt 值无损地转换为字符串并从字符串转换回来。

» BigInt("994633657141813248")
994633657141813248n

» String(994633657141813248n)
"994633657141813248"  // <-- The "n" goes away

Number 并非如此——它们在从字符串解析时可能会丢失精度。

» Number("994633657141813248")
994633657141813200  // <-- Off by 48!

MDN 有更多关于 BigInt 的信息

DevTools 中的可访问性检查

Firefox 的每个版本都带来了改进的 DevTools,但 Firefox 68 标志着一项全新功能的首次亮相:检查基本的可访问性问题。

Screenshot of the Accessibility panel in the Firefox DevTools, showing the results of a text contrast check. The page being checked is a Wired article from 2016, "How the Web Became Unreadable." Ironically, its header fails the contrast check.

使用 Firefox 68,可访问性面板现在可以报告页面上文本的任何颜色对比度问题。将来还计划进行更多检查。

我们还

  • 在检查器中包含了一个启用“打印媒体模拟”的按钮,以便轻松查看页面哪些元素在打印时可见。(在维基百科上试一试!)
  • 改进了控制台中的 CSS 警告,以显示更多信息并包含指向相关节点的链接。Firefox DevTools 的屏幕截图,显示控制台中类似“未知属性'foo',已删除声明”的 CSS 警告。警告显示与具有错误规则的选择器匹配的节点列表。
  • 增加了对调整字母间距的支持,可以在字体编辑器中进行操作。
  • 在 DevTools 控制台中实现了基于正则表达式的过滤:只需将您的查询括在斜杠中,例如 /(foo|bar)/
  • 可以通过在网络面板中右键单击它们来阻止特定请求。

Firefox 68 还包含对我们几周前撰写文章中提到的更智能的调试功能的改进。

Web 兼容性

保持 Web 开放是一项艰巨的工作。有时,浏览器在如何解释 Web 标准方面存在分歧。其他时候,浏览器会在未经过标准流程的情况下实现和发布自己的想法。更糟糕的是,一些开发人员故意阻止某些浏览器访问他们的网站,无论这些浏览器是否可以正常工作。

Screenshot of a blank webpage telling the visitor that the site is "currently not supporting your browser."

在 Mozilla,我们将这些称为“Web 兼容性”问题,或简称“webcompat”。

Firefox 的每个版本都包含针对 webcompat 问题的修复。例如,Firefox 68 实现了

在后一种情况下,即使标准的 line-clamp 属性正在开发中,我们也必须支持 -webkit- 版本以确保现有网站在 Firefox 中正常工作。

不幸的是,并非所有 webcompat 问题都像实现其他浏览器的非标准 API 那样简单。有些问题只能通过修改 Firefox 在特定网站上的工作方式来解决,甚至告诉 Firefox 假装成其他东西以逃避浏览器嗅探。

Screenshot of a webpage that blocks Firefox users, but which works perfectly with a webcompat intervention.

我们将这些有针对性的修复作为 Firefox 捆绑的webcompat 系统附加组件的一部分提供。这使得在网站发生变化时更容易更新我们的 webcompat 干预措施,而无需将这些修复直接添加到 Firefox 本身。从 Firefox 68 开始,您可以通过访问 about:compat 并切换相关开关来查看(并禁用)这些干预措施。

我们的首选始终是帮助开发人员确保他们的网站在所有现代浏览器上都能正常工作,但我们只能解决我们已知的问题。如果您遇到 Web 兼容性问题,请在webcompat.com 上报告。

CSS:滚动捕捉和标记样式

Firefox 68 支持CSS 滚动捕捉的最新语法,该语法提供了一种标准化的方法来控制容器内滚动的行为。您可以在 Rachel Andrew 的文章Firefox 68 中更新的 CSS 滚动捕捉中了解更多信息。

如上视频所示,滚动捕捉允许您开始滚动容器,以便在达到某个阈值时,松开手指会整齐地完成滚动到下一个可用的捕捉点。如果您自己尝试一下,会更容易理解这一点,因此下载 Firefox 68并在MDN 滚动捕捉文档中的一些示例上试一试。

如果您想知道这会如何处理现在已经过时且不推荐使用的滚动捕捉点规范,请阅读浏览器兼容性和滚动捕捉

今天发布的 Firefox 还增加了对<a href="https://mdn.org.cn/en-US/docs/Web/CSS/::marker" rel="nofollow">::marker</a>伪元素的支持。这使得可以设置出现在列表项summary元素旁边的项目符号或计数器的样式。

最后但并非最不重要的是,CSS 变换现在适用于间接渲染的 SVG 元素,如 markmarkerpatternclipPath

我们正在撰写一篇关于 Firefox 68 中这些以及其他 CSS 更改的完整文章;请在本月晚些时候留意。

浏览器:WebRender 和 QuantumBar 更新

两个月前,Firefox 67 成为第一个默认启用WebRender 的 Firefox 版本,尽管仅限于在 Windows 10 上使用 NVIDIA GPU 的用户。Firefox 68 将此受众扩展到包括在 Windows 10 上使用 AMD GPU 的用户,并将陆续支持更多平台。

我们还在 Firefox 基础的其他领域辛勤工作。URL 地址栏(昵称为“AwesomeBar”)已使用 Web 技术完全重新实现:HTML、CSS 和 JavaScript。这个新的“QuantumBar”应该与之前的 AwesomeBar 没有区别,但其架构使其在将来更容易维护和扩展。通过这次大修,我们朝着最终淘汰我们的旧版 XUL/XBL 工具包迈出了一步。

DOM API

Firefox 68 对现有 DOM API 进行了多项更改,特别是

我们还添加了一些新的 API,包括对 Android 上的视觉视口 API的支持,该 API 返回考虑了屏幕键盘或捏合缩放等因素的视口。这可能会导致可见区域小于整体布局视口

现在还可以使用<a href="https://mdn.org.cn/en-US/docs/Web/API/HTMLImageElement/decode" rel="nofollow">.decode()</a> 方法在HTMLImageElement上下载和解码元素,然后再将它们添加到 DOM 中。例如,此 API 简化了用更高分辨率的图像替换低分辨率的占位符:它提供了一种方法来知道新图像可以在插入到页面后立即显示。

更多内容

这些亮点只是冰山一角。除了 Firefox 中的这些更改外,上个月我们还发布了Lockwise,这是一种密码管理器,可让您在移动设备上随身携带保存的凭据。我们还在 Android 上发布了全新的Firefox 预览版等等。

感谢您选择Firefox,这是来自您最喜欢的“年度互联网反派”提名者的全体成员的感谢。

关于 Dan Callahan

Mozilla 开发者关系工程师,前 Mozilla Persona 开发人员。

更多 Dan Callahan 的文章…


15 条评论

  1. Potch

    太棒的版本!我从未想过我会对 -webkit-line-clamp 感到兴奋,但现在就是这样 :D

    2019 年 7 月 9 日 13:45

  2. Robert

    每次我开始输入时,URL 地址栏都会向下弹出。Firefox 最初忽略了我在选项中的首选项,因此我不得不使用 CSS 文件创建一个特殊的 chrome 文件夹。它现在也忽略了该文件。

    为什么我被迫让 Google 搜索我输入的内容?

    我似乎也被迫更新,否则我经常会在右上角看到通知。

    你们现在比微软还糟糕。贪婪真糟糕。

    2019 年 7 月 9 日 22:39

    1. Dan Callahan

      嗨!

      1. 我们不提供对 userChrome.css 修改的支持,但有一个Reddit 社区 可以帮助您解决问题。

      2. 您可以在“首选项” -> “搜索” -> “提供搜索建议”中关闭搜索建议。

      3. 我们强烈建议您保持 Firefox 更新,以获取针对已知安全漏洞的最新修复程序。

      2019 年 7 月 10 日 08:14

  3. Flimm

    感谢你们的努力。作为一名开发者,我感谢 Firefox 的开发以及这些写得很好的博客文章。

    2019 年 7 月 11 日 01:33

  4. Sebastian

    我喜欢新的 a11y 功能!但是这个“打印媒体模拟”按钮到底在哪里?

    2019 年 7 月 12 日 01:16

    1. Dan Callahan

      它位于 DevTools 检查器的 CSS 规则面板顶部。“:hov”和“:cls”按钮的右侧。

      这篇 MDN 文章上的第二张图片有标注。:)

      2019 年 7 月 12 日 05:22

  5. Krish

    请移除“在不安全的上下文中(如普通 HTTP)不再允许访问摄像头、麦克风和其他媒体设备”,因为我们在本地网络应用程序中有一些需求,我们无法使用 https

    2019 年 7 月 18 日 09:01

    1. Dan Callahan

      抱歉,我们不会撤销该更改。您可以通过在 about:config 中切换 media.getusermedia.insecure.enabledmedia.devices.insecure.enabled 来暂时放宽限制,我应该提醒您,所有浏览器供应商都一致认为访问强大的 API 需要安全的连接,因此这些设置只是一个权宜之计。

      2019 年 7 月 18 日 09:42

  6. Daniele Visaggio

    很棒的工作!

    关于 Android 版 ff 的问题:为什么您删除了 openh264 插件?

    在官方链接中我找不到原因:https://support.mozilla.org/en-US/kb/firefox-android-openh264

    谢谢

    2019 年 7 月 18 日 09:08

    1. Dan Callahan

      看起来那篇支持文章是我们唯一公开的声明;抱歉!我们应该尽可能回退到 VP8/VP9,并且我们正在寻找其他方法来继续支持 H.264,但目前还没有任何要说的。

      希望不受专利限制的 AV1 编解码器的采用将在未来使所有这些都变得更加简单!

      2019 年 7 月 18 日 11:50

      1. Daniele Visaggio

        谢谢,但这并非好消息。现在 Android 版 ff 不再与 WebRTC 兼容,因为 h264 和 vp8 都是必须实现的视频编解码器。参考:https://tools.ietf.org/html/rfc7742#section-5

        > WebRTC 浏览器必须实现 VP8 视频编解码器,如 [RFC6386] 中所述,以及 H.264 受限基线,如 [H264] 中所述。
        [RFC6386] 和 [H264] 中描述的。

        无故移除编解码器更糟糕。

        2019年7月19日 00:48

        1. Dan Callahan

          这确实是一个不幸的情况,我们意识到我们不再满足规范的要求。对不起。

          我正在四处询问,看看是否可以发布一份关于移除原因的声明,我们正在努力寻找一种方法来恢复 Android 上的 h.264 支持。

          编辑:此更改源于 错误 1548679,该错误现已公开。

          2019年7月19日 08:07

  7. Buv

    CSS 滚动捕捉似乎不像 Chrome 中宣传的那样工作。根据 Rachel Andrew 的文章:“如果您已实现滚动捕捉以在 Chrome 中工作,则您无需执行任何操作 - 您的滚动捕捉现在将在 Firefox 中工作。”

    https://codepen.io/anon/pen/LwEOqO
    以上示例在 Chrome 中运行良好,但在 Firefox 68 中则不行。

    2019年7月19日 03:51

  8. Okaoki

    我今天刚更新了我的 ff 到 68.0.1,我发现了一些问题,希望有人能帮我解决。
    即使我将
    browser.tabs.remote.autostart 设置为 false,我的任务管理器中有多个 firefox.exe 进程,现在它使用了更多的 RAM。
    我的笔记本电脑只有 2 GB 的内存。
    每次我输入任何内容时,地址栏始终显示“访问”。
    我尝试从互联网上在 about:config 中找到一些选项并将其设置为 false。

    2019年7月19日 03:56

    1. Dan Callahan

      您应该能够通过访问 about:support 并查看“远程进程”标题下的内容来查看哪些进程正在运行。

      我不确定您想更改“访问”的哪些内容。如果您在 /r/Firefoxsupport.mozilla.org 上提问,更有可能获得有用的答案。

      2019年7月19日 08:23

本文的评论已关闭。