控制应用的启动方式。
通过 Launch Handler API,您可以控制应用的启动方式,例如,应用是使用现有窗口还是新窗口,以及是否将所选窗口导航到启动网址。与 File Handing API 一样,这也会在已启动页面的 window.launchQueue
中将 LaunchParams
对象加入队列。
当前状态
Step | 状态 |
---|---|
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 发送一条推文,告诉我们您使用它的位置和方式。