Popover API 现已成为 Baseline 新功能

发布时间:2025 年 2 月 7 日

2024 年 4 月,本网站上的一篇文章宣布 Popover API 现已成为 Baseline 新功能。但是,我们搞错了,Popover 于 2025 年 1 月 27 日成为 Baseline 功能。这篇文章解释了我们为什么会犯错,以及此后发生了哪些变化,以减少此类错误发生的可能性。

什么是 Popover API?

Popover API 提供了一种内置方法来创建 Web 应用程序中使用的各种类型的弹出框。以前,这些需要您使用 JavaScript,并非常注意以无障碍的方式实现它们。该 API 将所有这些都带到了浏览器中,并且可以在 HTML 中以声明方式创建一个简单的弹出框。

<button popovertarget="my-popover">Open Popover</button>

<div id="my-popover" popover>
  <p>I am a popover with more information. Hit <kbd>esc</kbd> or click away to close me.</p>
</div>
使用 popover 属性的基本示例。

为什么它在 2024 年 4 月没有成为 Baseline 功能?

当 Firefox 在 2024 年 4 月发布其 popover 实现时,我们尚未发现 iOS 和 iPadOS 上存在重大问题。在这些移动浏览器上,点击弹出框外部不会关闭它,这是一个称为轻度关闭的功能。这是一个会阻止大多数开发者乐于使用 popover 的问题。这意味着它不应该在 4 月份被包含为 Baseline 功能,并且需要等到 Safari 18.3 中修复该错误。

我们为什么会犯错?

Baseline 依赖于 web-features 工作来计算功能何时属于或不属于 Baseline 功能。如果您查看该项目中的单个功能文件,例如 popover 的文件,您将看到 Mozilla 浏览器兼容性数据中列出的各个功能。一个 Web 功能通常包含许多此类包含项。这是因为 Web 上的功能不仅仅是一个属性或方法,它需要许多组件部分才能工作。功能也不是整个规范。例如,CSS 规范通常包含从未实现或仅在特定上下文中使用的子功能。Web 功能工作使用现有可用性数据和人工输入的组合来确定构成 Web 平台功能的要素,以及至关重要的是,部分实现是否严重到足以将其排除在 Baseline 功能之外。

早在二月份,Web 功能工作还远未完成。因此,为了帮助展示 Baseline 将如何工作,我们试图在没有所有我们需要的数据的情况下找出将成为 Baseline 2024 一部分的关键功能。从纸面上看,或者更确切地说,在浏览器兼容性数据中,直到九月份才更新,当时发现了该问题,Popover 似乎已包含在内。但是,由于 iOS 上的错误非常严重,以至于阻止了 Popover 的使用,因此它尚未准备就绪。

移动设备也缺乏测试基础设施。Web Platform Tests 项目为我们提供了一种测试 Web 平台功能在所有浏览器中是否正常工作的方法。如果这种轻度关闭问题发生在桌面浏览器中,我们会看到测试失败,但移动设备并非如此。

我们如何在未来避免这种情况?

我们在数据方面已经做得好多了。Web 功能数据几乎已完成,因此对于我们声明为 Baseline 的任何功能,我们都可以更有信心。

特别是对于这个问题,部分问题是识别仅在移动设备(iOS)上发生的问题。正在发生一些事情,应该使未来更容易识别移动设备上的互操作性问题。改进 Web Platform Tests 中的移动测试的工作正在进行中,因此我们应该能够更好地识别移动浏览器何时出现问题,与桌面浏览器分开。我们还计划今年在 webstatus.dev 仪表板上公开此数据。如果将来发生类似问题,我们应该更快地获得它已发生的迹象,希望在我们将该功能包含在 Baseline 功能之前。

我们一直都知道,将整个 Web 平台映射为一组功能并非易事!但是,我们正在进行的关于部分实现、错误以及实际构成功能的要素的讨论非常有价值。它正在帮助我们确定对您真正重要的内容,为我们在规划 Interop 2025 等工作时提供更好的信号。