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
Async Clipboard:读取和写入图片Chrome 76
网站分享目标级别 2Chrome 76
输入键提示Chrome 77
扩大存储空间配额Chrome 78
Get Installed Related Apps APIChrome 80
定期后台同步Chrome 80
desktop-pwas:支持“minimal-ui”显示模式Chrome 80
压缩编解码器Chrome 80
Contacts APIChrome 80
Badging APIChrome 81
允许通过推送从服务工件使用 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
为 Async Clipboard API 添加了 text/html 支持Chrome 86
对相机的平移/倾斜支持Chrome 87
FUGU 实现了对头戴式耳机和扬声器的系统和应用音频输出的捕获 Chrome 88
PointerLock unadjustedMovementChrome 88
创建类似于 Android 上照片选择器的照片/视频选择器Chrome 88
Web Share (navigator.share) 与 Windows 10 的集成Chrome 88
Web NFCChrome 89
WebHID(人机接口设备)Chrome 89
Web Serial APIChrome 89
桌面设备上的网页分享Chrome 89
手写识别 APIChrome 90
Web 应用的受管理配置Chrome 91
在 OS Login 中运行 PWAChrome 91
WebCodecsChrome 93
空闲检测Chrome 94
EyeDropper APIChrome 95
macOS 和 Linux 上 PWA 的应用快捷方式菜单Chrome 96
PWA 的网址协议处理程序注册 Chrome 96
WebTransportChrome 97
剪贴板:粘贴 Retina 图片会丢失 pHYs 元数据。Chrome 98
PWA 应能以与“真实应用”相同的方式卸载Chrome 99
Web NFC:NDEFReader makeReadOnly()Chrome 100
多屏幕窗口展示位置Chrome 100
HIDDevice forget()Chrome 100
USBDevice forget()Chrome 101
Web USB sameObject 行为Chrome 101
已安装的桌面 Web 应用的窗口控件叠加层Chrome 102
文件处理Chrome 102
chrome.management API 无法再与 PWA 应用互动Chrome 102
SerialPort forget()Chrome 103
本地字体访问权限Chrome 103
Fugu 请求:动态应用快捷方式 (Shortcuts v2)Chrome 104
适用于 Async Clipboard API 的 Web 自定义格式Chrome 104
迄今为止所有已发布的 Fugu API。

我们还有许多工作要做。目前,仍有几个 API 和功能处于开发者试用阶段(即已实现,但处于功能标志后面),有些功能我们已开始开发,还有许多功能正在考虑。如您所见,我们还没有完成。

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

恰恰相反,我们实际上才刚刚开始,而不是宣布我们的努力已完成。例如,请参考下图,其中显示了用作来源私有文件系统 (OPFS) 入口点的 navigator.storage.getDirectory() 方法的相对使用量激增。例如,此方法可用于满足 Photoshop 的高性能存储需求,自 Web SQL 开始弃用以来,甚至在此之前,存储社区就对此非常感兴趣

显示 navigator.storage.getDirectory 方法相对使用率飙升的图表。

现在,越来越多的人使用 OPFS,因此出现了额外的要求。例如,在 worker 上下文中需要一组完全同步的文件方法(如需了解背景信息,请参阅 whatwg/fs#7)。虽然新的 Web API 通常是异步的,但拥有同步方法会让在 Wasm 上下文中使用 OPFS 变得更加简单,而且由于这在工作器中进行,因此主线程不会被阻塞。

改进了硬件 API 的隐私保护功能

另一个例子是硬件 API,可让您连接到 HID串行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 实现互操作性后,我们才会认为自己的工作已完成,我们将继续推动进一步的标准化、测试和其他浏览器的采用。