Project Fugu 团队的一个目标是使开发者能够执行平台专用应用能够执行的任何 Web 操作,因此该团队一直忙于添加 Web 开发者所需的缺失功能,以弥补这一应用差距。如果您不相信我,请查看 Fugu API 跟踪器的“已发货”部分。以下是 55 个已交付的 API,按交付时间由近到远的顺序排列:
这个清单很长,我们餐桌上的菜还不止于此。还有一些 API 和功能正处于开发者试用阶段(也就是说,已经实现,但背后是功能标志);一些 API 和功能我们已经开始着手开发,还有很多正在考虑。如您所见,现在还不是靠边说我们完了。
适用于源私有文件系统的同步文件方法
恰恰相反,我们并没有声称我们的努力已经完成,而是刚刚开始。例如,下面的图表显示了 navigator.storage.getDirectory()
方法(用作源私有文件系统 (OPFS) 的入口点)的相对使用量激增。例如,此方法用于满足 Photoshop 的高性能存储需求,以及自 Web SQL 开始弃用以来甚至之前存储社区高度关注的场景。
随着更多人使用 OPFS,也提出了一些额外的要求。例如,需要在工作器上下文中使用一组完全同步的文件方法(如需了解后台,请参阅 whatwg/fs#7)。虽然新的 Web API 通常是异步的,但具有同步方法会大大简化 Wasm 上下文中的 OPFS 的使用,而且由于这是在工作器中发生的,因此无法阻止主线程。
硬件 API 隐私保护方面的改进
另一个示例是硬件 API,可让您连接到 HID、serial、USB、蓝牙和 NFC 设备。虽然其中一些 API 已经存在一段时间了,但直到最近,还无法忘记之前连接过的设备。现在,这要感谢部分 API 的 forget()
方法。例如,以下示例展示了如何取消保存之前连接的串行设备,从而加强了 API 的隐私保护。
// Request a serial port.
const port = await navigator.serial.requestPort();
// Then later revoke permission to the serial port.
await port.forget();
Multi-Screen Window Placement API 的优化
最后一个示例是 Multi-Screen Window Placement API。根据开发者的反馈,之前的通用屏幕标签(如 "Internal Display 1"
)已替换为更有意义的标签(如 "Built-in Retina Display"
),以便用户更轻松地将这些标签与其跨屏设置的屏幕相关联。
总结
从这三个示例中可以看出,Project Fugu 远远没有完成。您可以保留或开始使用我们的 API,并发送反馈。由于所有 Fugu 规范都是在 GitHub 上的公开问题中开发的,因此您可以在相应的 GitHub 代码库上提交规范问题,也可以将您的想法添加到现有问题中。如果您发现 Chrome 实现存在 bug,或发现实现与规范不同,请在 new.crbug.com 上提交 bug。请务必提供尽可能多的详细信息,并提供重现问题的简单说明。
此外,如果您担心浏览器支持,很多 Fugu API 都可以进行出色的渐进式增强功能。如需获得灵感,请参阅我的文章 SVGcode:将光栅图片转换为 SVG 矢量图形的 PWA。在这些 API 具有互操作性之前,我们不会认为我们的工作已经完成,并将继续推动其他浏览器进行进一步的标准化、测试并采用。