file_handlers

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

file_handlers 成员指定一个对象数组,代表已安装的渐进式 Web 应用 (PWA) 可以处理的文件类型。

浏览器在安装 PWA 时会读取 file_handlers 成员,并用它在操作系统层面将应用程序与一组指定的文件类型关联起来。

例如,PWA 可以注册以处理匹配 text/plain MIME 类型的文件。一旦安装了此 PWA,操作系统就可以使用它来处理文本文件,当用户打开此类文件时,将启动 PWA。请注意,其他应用程序也可能注册为文本文件处理程序,并且操作系统管理文件类型与应用程序之间关联的方式,以及它们允许用户选择处理给定文件的应用程序的方式,可能因设备而异。

注意:虽然 file_handlers 成员用于将 PWA 与一组指定的文件类型注册,但这只会导致操作系统在打开匹配文件时启动 PWA。然后,PWA 需要使用 JavaScript 代码实际处理该文件。有关更多信息,请参阅处理文件

一个对象数组。数组中的每个对象都必须包含以下值(actionaccept 是必需的)

action

当处理文件时,导航到的 URL 的字符串。此 URL 必须在 PWA 的导航范围内,即 PWA 可以导航到的 URL 集合。PWA 的导航范围默认为其 start_url 成员,但也可以通过使用 scope 成员来定义。

accept

一个对象。对于对象中的每个属性

  • 属性键是 MIME 类型。
  • 属性值是一个字符串数组,代表与该 MIME 类型关联的文件扩展名。

示例

在此示例中,Web 应用清单声明了一个文件处理程序,该处理程序将应用程序注册为处理音频文件。出于简洁性考虑,此示例未包含 nameicons 等其他清单成员。

json
{
  "file_handlers": [
    {
      "action": "/handle-audio-file",
      "accept": {
        "audio/wav": [".wav"],
        "audio/x-wav": [".wav"],
        "audio/mpeg": [".mp3"],
        "audio/mp4": [".mp4"],
        "audio/aac": [".adts"],
        "audio/ogg": [".ogg"],
        "application/ogg": [".ogg"],
        "audio/webm": [".webm"],
        "audio/flac": [".flac"],
        "audio/mid": [".rmi", ".mid"]
      }
    }
  ]
}

处理文件

为了在 PWA 中实际实现文件处理,Web 开发人员还需要使用 window.launchQueue 在其应用程序 JavaScript 代码中处理传入的文件。

文件处理是在应用程序代码的主线程上进行的,而不是在应用程序的服务工作线程中进行的。

在以下示例中,window.launchQueue.setConsumer() 用于指定一个回调函数,该函数接收传入的音频文件,并使用 Audio 元素播放第一个文件。

js
async function playSong(handledFile) {
  const blob = await handledFile.getFile();
  const url = window.URL.createObjectURL(blob);
  const audio = new Audio(url);
  audio.play();
}

if ("launchQueue" in window) {
  window.launchQueue.setConsumer((launchParams) => {
    if (launchParams.files && launchParams.files.length) {
      playSong(launchParams.files[0]);
    }
  });
}

规范

规范
清单孵化
# file_handlers 成员

浏览器兼容性

另见