Project Fugu 是否已“完成”?

Project Fugu 团队的一个目标是使开发者能够执行平台专用应用能够执行的任何 Web 操作,因此该团队一直忙于添加 Web 开发者所需的缺失功能,以弥补这一应用差距。如果您不相信我,请查看 Fugu API 跟踪器的“已发货”部分。以下是 55 个已交付的 API,按交付时间由近到远的顺序排列:

API 名称 发货地
Web Bluetooth APIChrome 56
WebUSB APIChrome 61
网络共享目标Chrome 71
Web Share API 级别 2Chrome 75
异步剪贴板:读取和写入图片Chrome 76
网络共享目标级别 2Chrome 76
Enter 键提示Chrome 77
扩展存储空间配额Chrome 78
获取已安装的 Related Apps APIChrome 80
定期后台同步Chrome 80
desktop-pwas:支持“minimal-ui”显示模式Chrome 80
压缩编解码器Chrome 80
Contacts APIChrome 80
Badging APIChrome 81
允许通过推送从 Service Worker 使用 Badging APIChrome 81
Barcode Detection APIChrome 83
Content Indexing APIChrome 84
WebOTPChrome 84
Screen Wake Lock APIChrome 84
Streams API:可传输流Chrome 85
应用快捷方式Chrome 85
文件系统访问Chrome 86
对异步剪贴板 API 的文本/html 支持Chrome 86
为相机提供平移/倾斜度支持Chrome 87
FUGU 实现将系统和应用音频输出捕获到头戴式耳机和扬声器 Chrome 88
PointerLock 未调整移动Chrome 88
创建类似于 Android 上的照片选择器的照片/视频选择器Chrome 88
与 Windows 10 集成网络共享 (navigator.share)Chrome 88
网络 NFCChrome 89
WebHID(人机接口设备)Chrome 89
Web Serial APIChrome 89
桌面设备上的网络分享Chrome 89
手写识别 APIChrome 90
Web 应用的托管配置Chrome 91
在登录操作系统时运行 PWAChrome 91
WebCodecsChrome 93
空闲检测Chrome 94
EyeDropper APIChrome 95
macOS 和 Linux 上 PWA 的应用快捷方式菜单Chrome 96
PWA 的网址协议处理程序注册 Chrome 96
WebTransportChrome 97
剪贴板:粘贴视网膜图片会丢失 pHY 元数据。Chrome 98
PWA 的卸载方式应该与“真实应用”的卸载方式相同Chrome 99
网络 NFC:NDEFReader makeReadOnly()Chrome 100
跨屏窗口放置Chrome 100
HIDDevice remember()Chrome 100
USBDevice remember()Chrome 入门指南
网络 USB sameObject 行为Chrome 入门指南
适用于已安装的桌面 Web 应用的窗口控件叠加层Chrome 入门指南
文件处理Chrome 入门指南
chrome.management API 无法再与 PWA 应用交互Chrome 入门指南
SerialPort remember()Chrome 入门指南
本地字体访问权限Chrome 入门指南
Fugu 请求:动态应用快捷方式 (Shortcuts v2)Chrome 入门指南
适用于 Async Clipboard API 的网页自定义格式Chrome 入门指南
到目前为止,已交付所有 Fugu API。

这个清单很长,我们餐桌上的菜还不止于此。还有一些 API 和功能正处于开发者试用阶段(也就是说,已经实现,但背后是功能标志);一些 API 和功能我们已经开始着手开发,还有很多正在考虑。如您所见,现在还不是靠边说我们完了。

适用于源私有文件系统的同步文件方法

恰恰相反,我们并没有声称我们的努力已经完成,而是刚刚开始。例如,下面的图表显示了 navigator.storage.getDirectory() 方法(用作源私有文件系统 (OPFS) 的入口点)的相对使用量激增。例如,此方法用于满足 Photoshop 的高性能存储需求,以及自 Web SQL 开始弃用以来甚至之前存储社区高度关注的场景。

显示 navigator.storage.getDirectory 方法的相对使用量激增的图表。

随着更多人使用 OPFS,也提出了一些额外的要求。例如,需要在工作器上下文中使用一组完全同步的文件方法(如需了解后台,请参阅 whatwg/fs#7)。虽然新的 Web API 通常是异步的,但具有同步方法会大大简化 Wasm 上下文中的 OPFS 的使用,而且由于这是在工作器中发生的,因此无法阻止主线程。

硬件 API 隐私保护方面的改进

另一个示例是硬件 API,可让您连接到 HIDserialUSB蓝牙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 具有互操作性之前,我们不会认为我们的工作已经完成,并将继续推动其他浏览器进行进一步的标准化、测试并采用。