控制应用的启动方式。
借助 Launch Handler API,您可以控制应用的启动方式,例如,应用是使用现有窗口还是新窗口,以及所选窗口是否导航到启动网址。与 File Handing API 一样,此 API 也会在已启动页面的 window.launchQueue
中将 LaunchParams
对象加入队列。
当前状态
步骤 | 状态 |
---|---|
1. 创建铺垫消息 | 完成 |
2. 创建规范的初始草稿 | 完成 |
3. 收集反馈并反复改进设计 | 全面完整 |
4. 源试用。 | 全面完整 |
5. 发布 | 完成 |
使用 Launch Handler API
浏览器支持
启动处理程序仅适用于 ChromeOS。
接口
Launch Handler 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 应用窗口中最近与浏览上下文交互的时间来处理启动。系统会将targetURL
设置为启动网址的新LaunchParams
对象加入文档的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 启动处理程序演示中查看 Launch Handler API 的实际演示。请务必查看应用的源代码,了解其如何使用 Launch Handler API。
- 在 ChromeOS 设备上安装 Musicr 2.0 应用。
- 在
https://launch-handler.glitch.me?track=https://example.com/music.mp3
形式的聊天应用中向自己发送链接。(您可以为指向音频文件的任何网址自定义https://example.com/music.mp3
,例如https://launch-handler.glitch.me?track=https://cdn.glitch.me/3e952c9c-4d6d-4de4-9873-23cf976b422e%2Ffile_example_MP3_700KB.mp3?v=1638795977190
)。 - 点击聊天应用中的链接,您会看到 Musicr 2.0 是如何打开并播放曲目的。
- 再次点击聊天应用中的链接,您会发现系统不会再次显示 Musicr 2.0。
反馈
Chromium 团队希望了解您使用 Launch Handler API 的体验。
告诉我们有关 API 设计的信息
此 API 是否存在无法正常运行的情况?或者,是否缺少一些方法或属性来实施您的想法?对安全模型有疑问或意见?在相应的 GitHub 代码库中提交规范问题,或对现有问题分享您的想法。
报告实施方面的问题
您是否发现了 Chromium 实现方面的问题?或者,实现是否与规范不同?
在 new.crbug.com 上提交 bug。请务必提供尽可能详细的信息、有关重现问题的简单说明,并在组件框中输入 Blink>AppManifest
。
Glitch 非常适合用于快速轻松地重现视频拍摄的视频。
显示对该 API 的支持
您是否打算使用 Launch Handler API?您的公开支持有助于 Chromium 团队确定功能的优先级,并向其他浏览器供应商说明支持这些功能的重要性。
请使用 # 标签 #LaunchHandler
向 @ChromiumDev 发送 Twitter 微博,并告知我们您在哪里以及如何使用它。