启动处理程序 API

可用性有限

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

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

启动处理程序 API 允许开发者控制渐进式 Web 应用 (PWA) 的启动方式——例如,它是否使用现有窗口或创建新窗口,以及如何处理应用的启动目标 URL。

概念与用法

您可以通过在 Web 应用清单文件中添加 launch_handler 字段来指定应用的启动行为。该字段有一个子字段 client_mode,其中包含一个字符串值,指定应用应如何启动和导航。例如:

json
{
  "launch_handler": {
    "client_mode": "focus-existing"
  }
}

如果未指定,默认的 client_mode 值为 auto。可用值为:

focus-existing

将选择最近与 Web 应用窗口中的浏览上下文进行交互的上下文来处理启动。这会将启动目标 URL 填充到传递给 window.launchQueue.setConsumer() 回调函数的 LaunchParams 对象的 targetURL 属性中。正如您将在下面看到的,这允许您为您的应用设置自定义的启动处理功能。

将最近与 Web 应用窗口中的浏览上下文进行交互的上下文导航到启动目标 URL。目标 URL 仍可通过 window.launchQueue.setConsumer() 访问,以便实现额外的自定义启动导航处理。

在 Web 应用窗口中创建一个新的浏览上下文来加载启动目标 URL。目标 URL 仍可通过 window.launchQueue.setConsumer() 访问,以便实现额外的自定义启动导航处理。

auto

用户代理决定最适合平台的行为。例如,在移动设备上,navigate-existing 可能更合适,因为单实例应用很常见,而在桌面环境中,navigate-new 可能更合适。如果提供了无效值,则使用此默认值。

当使用 focus-existing 时,您可以在 window.launchQueue.setConsumer() 的回调函数中包含代码,以提供对 targetURL 的自定义处理。

js
window.launchQueue.setConsumer((launchParams) => {
  // Do something with launchParams.targetURL
});

注意: LaunchParams 还有一个 LaunchParams.files 属性,它返回一个只读的 FileSystemHandle 对象数组,表示通过 POST 方法随启动导航一起传递的任何文件。这允许实现自定义文件处理。

接口

LaunchParams

在 PWA 中实现自定义启动导航处理时使用。当调用 window.launchQueue.setConsumer() 来设置启动导航处理功能时,setConsumer() 中的回调函数将接收一个 LaunchParams 对象实例。

LaunchQueue

当使用 focus-existingnavigate-newnavigate-existinglaunch_handler client_mode 值启动渐进式 Web 应用 (PWA) 时,LaunchQueue 提供对功能的访问,该功能允许在 PWA 中实现自定义启动导航处理。此功能由传递给 setConsumer() 回调函数的 LaunchParams 对象的属性控制。

其他接口的扩展

window.launchQueue

提供对 LaunchQueue 类的访问,该类允许在渐进式 Web 应用 (PWA) 中实现自定义启动导航处理,其处理上下文由 launch_handler 清单字段 client_mode 值表示。

示例

js
if ("launchQueue" in window) {
  window.launchQueue.setConsumer((launchParams) => {
    if (launchParams.targetURL) {
      const params = new URL(launchParams.targetURL).searchParams;

      // Assuming a music player app that gets a track passed to it to be played
      const track = params.get("track");
      if (track) {
        audio.src = track;
        title.textContent = new URL(track).pathname.slice(1);
        audio.play();
      }
    }
  });
}

此代码包含在 PWA 中,并在应用加载时、启动时执行。window.launchQueue.setConsumer() 的回调函数从 LaunchParams.targetURL 中提取搜索参数,如果找到 track 参数,则使用它来填充 <audio> 元素的 src 并播放该元素指向的音频轨道。

有关完整的可运行代码,请参阅 Musicr 2.0 演示应用。

规范

规范
Web 应用启动处理程序 API
# launchqueue-interface

浏览器兼容性

另见