控制应用的启动方式。
借助 Launch Handler API,您可以控制应用的启动方式,例如是使用现有窗口还是新窗口,以及所选窗口是否导航到启动网址。与文件处理 API 一样,此 API 也会在启动的网页的 window.launchQueue
中将 LaunchParams
对象排入队列。
当前状态
步骤 | 状态 |
---|---|
1. 创建说明 | 完成 |
2. 创建规范的初始草稿 | 完成 |
3. 收集反馈并迭代设计 | 完成 |
4. 源试用。 | 完成 |
5. 发布 | 完成 |
使用 Launch Handler API
浏览器支持
接口
启动处理程序 API 定义了两个新接口。
LaunchParams
:一个对象,包含要由消费者处理的 targetURL
。 LaunchQueue
:将启动操作排队,直到它们被指定的消费者处理。
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。
- 安装 Musicr 2.0 应用。
- 在聊天应用中向自己发送表单
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
)。 - 点击聊天应用中的链接,然后注意 Musicr 2.0 如何打开并播放相应曲目。
- 再次点击聊天应用中的链接,您会发现不会再出现一个 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 发送推文,告诉我们您在何处以及如何使用它。