Launch Handler API

控制应用的启动方式。

借助 Launch Handler API,您可以控制应用的启动方式,例如是使用现有窗口还是新窗口,以及所选窗口是否导航到启动网址。与文件处理 API 一样,此 API 也会在启动的网页的 window.launchQueue 中将 LaunchParams 对象排入队列。

当前状态

步骤 状态
1. 创建说明 完成
2. 创建规范的初始草稿 完成
3. 收集反馈并迭代设计 完成
4. 源试用。 完成
5. 发布 完成

使用 Launch Handler API

浏览器支持

接口

启动处理程序 API 定义了两个新接口。

LaunchParams:一个对象,包含要由消费者处理的 targetURLLaunchQueue:将启动操作排队,直到它们被指定的消费者处理。

launch_handler 清单成员

如需以声明方式指定应用的启动行为,请将 launch_handler 清单成员添加到清单中。它有一个名为 client_mode 的子字段。您可以通过此属性控制是应启动新客户端还是现有客户端,以及是否应导航此客户端。以下示例展示了一个包含示例值的文件,该文件始终会将所有启动路由到新客户端。

{   "launch_handler": {     "client_mode": "navigate-new"   } } 

如果未指定,则 launch_handler 默认为 {"client_mode": "auto"}。子字段的允许值如下:

  • client_mode
    • navigate-new:在 Web 应用窗口中创建一个新的浏览上下文,以加载启动的目标网址。
    • navigate-existing:Web 应用窗口中最近一次互动过的浏览上下文会导航到启动的目标网址。
    • focus-existing:选择 Web 应用窗口中最近一次互动过的浏览上下文来处理启动。系统会将一个新 LaunchParams 对象(其 targetURL 设置为启动网址)加入文档的 window.launchQueue 中。
    • auto:具体行为由用户代理决定,以确定最适合平台的行为。例如,移动设备仅支持单个客户端,因此会使用 existing-client,而桌面设备支持多个窗口,因此会使用 navigate-new 以避免数据丢失。

client_mode 属性还接受值列表(数组),其中将使用第一个有效值。这是为了允许向规范添加新值,而不会破坏与现有实现的向后兼容性。

例如,如果添加了假设值 "focus-matching-url",网站将指定 "client_mode": ["focus-matching-url", "navigate-existing"] 以继续控制不支持 "focus-matching-url" 的旧版浏览器的行为。

使用 window.launchQueue

在以下代码中,函数 extractSongID() 从启动时传递的网址中提取 songID。用于在音乐播放器 PWA 中播放歌曲。

if ('launchQueue' in window) {   launchQueue.setConsumer((launchParams) => {     if (launchParams.targetURL) {       const songID = extractSongId(launchParams.targetURL);       if (songID) {         playSong(songID);       }     }   }); } 

演示

您可以在 PWA 启动处理程序演示中查看启动处理程序 API 的实际应用情况。请务必查看应用的源代码,了解其如何使用启动处理程序 API。

  1. 安装 Musicr 2.0 应用。
  2. 在聊天应用中向自己发送表单 https://mdn.github.io/dom-examples/launch-handler/?track=https://example.com/music.mp3 的链接。(您可以为指向音频文件的任何网址自定义 https://example.com/music.mp3,例如 https://mdn.github.io/dom-examples/launch-handler/?track=https://huggingface.co/spaces/VIDraft/PHI4-Multimodal/resolve/main/examples/harvard.wav)。
  3. 点击聊天应用中的链接,然后注意 Musicr 2.0 如何打开并播放相应曲目。
  4. 再次点击聊天应用中的链接,您会发现不会再出现一个 Musicr 2.0 实例。

反馈

Chromium 团队希望了解您在使用 Launch Handler API 方面的体验。

介绍 API 设计

API 是否存在未按预期运行的情况?或者,是否有缺少的方法或属性需要您来实现自己的想法?对安全模型有疑问或意见?在相应的 GitHub 代码库中提交规范问题,或在现有问题中添加您的想法。

报告实现方面的问题

您是否发现了 Chromium 的实现存在 bug?或者实现是否与规范不同? 请前往 new.crbug.com 提交 bug。请务必尽可能详细地说明问题,提供重现说明,并在组件框中输入 Blink>AppManifest

显示对 API 的支持

您是否打算使用 Launch Handler API?您的公开支持有助于 Chromium 团队确定功能优先级,并向其他浏览器供应商展示支持这些功能的重要性。

使用 ##LaunchHandler 标签向 @ChromiumDev 发送推文,告诉我们您在何处以及如何使用它。

实用链接