跳转到内容

manifest: file_handlers 支持情况

发布于

manifest: file_handlers —file_handlers 成员将已安装的 PWA 注册为操作系统级别的 特定文件类型处理程序,使操作系统可以在用户打开匹配文件时启动该 PWA。应用通过 window.launchQueue 接收该文件。

  • 图例
  • 支持
  • 部分支持
  • 需开启标志
  • 不支持
  • 未知
浏览器 / 平台支持版本置信度来源备注
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
  1. browser-compat-data 未记录 Chrome Android 的支持。
  2. 由 browser-compat-data 镜像自 Chrome 的数据推导。
  3. browser-compat-data 未记录 Firefox 的支持。
  4. browser-compat-data 未记录 Firefox for Android 的支持。
  5. 由 browser-compat-data 镜像自 Firefox 的数据推导。
  6. browser-compat-data 未记录 Safari 的支持。
  7. browser-compat-data 未记录 iOS 版 Safari 的支持。
  8. 由 browser-compat-data 镜像自 Safari 的数据推导。
  9. browser-compat-data 未记录 Samsung Internet 的支持。
  10. 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
  11. browser-compat-data 未记录 WebView Android 的支持。
  12. 由 browser-compat-data 镜像自 Chrome Android 的数据推导。

源数据: /compatibility/manifest-file-handlers.json · 全球使用占比: 37 % (StatCounter 2026-05)

来源: 规范 · MDN · 最近核验 2026-10-03 · 置信度: 高 (由来源计算)

根据 Chrome for Developers 的说明,文件处理在 Chromium 的实现中“仅限于桌面操作系统”—— 不要指望它能在 Android 上注册文件关联。

根据 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]);
}
});
}

根据 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 注册的应用内文件选择器。

← 返回兼容性浏览器。