manifest: file_handlers 支持情况
发布于
manifest: file_handlers —file_handlers 成员将已安装的 PWA 注册为操作系统级别的
特定文件类型处理程序,使操作系统可以在用户打开匹配文件时启动该 PWA。应用通过
window.launchQueue 接收该文件。
浏览器与生态支持
Section titled “浏览器与生态支持”- 图例
- 支持
- 部分支持
- 需开启标志
- 不支持
- 未知
| 浏览器 / 平台 | 支持 | 版本 | 置信度 | 来源 | 备注 |
|---|---|---|---|---|---|
| Chrome (Desktop) | 支持 | 102 | 高 | 来源 | — |
| Chrome (Android) | 不支持 | — | 高 | 来源 | 1 |
| Edge (Desktop) | 支持 | 102 | 高 | 来源 | 2 |
| Firefox (Desktop) | 不支持 | — | 高 | 来源 | 3 |
| Firefox (Android) | 不支持 | — | 高 | 来源 | 45 |
| Safari (macOS) | 不支持 | — | 高 | 来源 | 6 |
| Safari (iOS) | 不支持 | — | 高 | 来源 | 78 |
| Samsung Internet | 不支持 | — | 高 | 来源 | 910 |
| WebView (Android) | 不支持 | — | 高 | 来源 | 1112 |
- browser-compat-data 未记录 Chrome Android 的支持。
- 由 browser-compat-data 镜像自 Chrome 的数据推导。
- browser-compat-data 未记录 Firefox 的支持。
- browser-compat-data 未记录 Firefox for Android 的支持。
- 由 browser-compat-data 镜像自 Firefox 的数据推导。
- browser-compat-data 未记录 Safari 的支持。
- browser-compat-data 未记录 iOS 版 Safari 的支持。
- 由 browser-compat-data 镜像自 Safari 的数据推导。
- browser-compat-data 未记录 Samsung Internet 的支持。
- 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
- browser-compat-data 未记录 WebView Android 的支持。
- 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
根据 Chrome for Developers 的说明,文件处理在 Chromium 的实现中“仅限于桌面操作系统”—— 不要指望它能在 Android 上注册文件关联。
接收已启动的文件
Section titled “接收已启动的文件”根据 MDN 的 file_handlers 参考文档,应用通过 window.launchQueue.setConsumer()
接收被启动的文件:
async function playSong(fileHandle) { const blob = await fileHandle.getFile(); const url = URL.createObjectURL(blob); new Audio(url).play();}
function supportsFileHandling() { return "launchQueue" in window && "files" in LaunchParams.prototype;}
if (supportsFileHandling()) { window.launchQueue.setConsumer(({ files }) => { if (files && files.length) { playSong(files[0]); } });}运行时检测与回退
Section titled “运行时检测与回退”根据 Chrome for Developers 的说明,File Handling 的特性检测需要同时满足两个条件——
"launchQueue" in window 和 "files" in LaunchParams.prototype——因为仅有
launchQueue 并不能确认应用所依赖的 files 参数形态。请同时使用这两项检测来保护
consumer 调用,并在该 OS 启动路径不可用时为用户提供应用内的打开方式:
if (supportsFileHandling()) { window.launchQueue.setConsumer(({ files }) => { if (files && files.length) { playSong(files[0]); } });} else { // 此处不支持文件处理——改用界面中手动的 <input type="file"> 选择器, // 而不依赖操作系统级别的文件关联。 document.getElementById("open-file-input").hidden = false;}-
file_handlers在 Chromium 中仅限桌面端,根据 Chrome for Developers 的说明——不要 期望 Android 上也能走通 OS 级别的“打开方式”流程。 - 请同时使用
"launchQueue" in window与"files" in LaunchParams.prototype两项检测(根据 Chrome for Developers 的说明)——仅检测launchQueue无法确认setConsumer()回调所依赖的files参数形态。 - 根据上方的兼容性数据,Firefox 与 Safari 均未实现
file_handlers——务必始终提供一个 不依赖 OS 注册的应用内文件选择器。
- manifest: shortcuts 支持情况 —— 已安装 PWA 的 另一个 manifest 成员。
- manifest:
shortcuts—— 同一安装时能力的参考 条目。
← 返回兼容性浏览器。