无需登录 数据私有 本地保存

Launch Handler 演示 - 控制 PWA 启动行为

3
0
0
0

Launch Handler 演示工具

控制 PWA 启动行为 · 可视化模拟 · Manifest 配置生成

实验性 API
Launch Handler 配置
focus-existing

聚焦现有窗口,不导航

navigate-existing

导航现有窗口到新 URL

navigate-new

始终创建新窗口

auto

浏览器自动决定(默认)

针对特定启动来源的细粒度控制
模拟启动场景
桌面模拟器
focus-existing PWA 运行中
🌐 浏览器
标签页 1 标签页 2
🔒 https://example.com/app
📄 网页内容区域
🔗 点击打开 PWA (scope内链接)
📱 My PWA App
🔒 https://myapp.example.com/dashboard
🏠 PWA 应用内容
当前页面: /dashboard
行为日志
模拟器已就绪 · PWA 窗口运行中 · 模式: focus-existing
生成的 Manifest 配置
// manifest.json { "name": "My PWA App", "short_name": "MyApp", "start_url": "/dashboard", "scope": "/", "display": "standalone", "launch_handler": { "client_mode": "focus-existing" } }

将此配置添加到你的 manifest.json 中,并在 PWA 中测试实际行为。

常见问题 (FAQ)
什么是 Launch Handler API?

Launch Handler API 允许 PWA 开发者控制应用如何响应启动请求。当用户从外部链接、分享目标或其他来源打开 PWA 时,开发者可以通过 launch_handler 配置来决定是聚焦现有窗口、导航现有窗口还是创建新窗口。这为 PWA 提供了更接近原生应用的启动体验。

该 API 在 Chrome 98+ 中可用,属于 Web App Manifest 规范的一部分。

client_mode 的四个选项有什么区别?
  • focus-existing:如果 PWA 窗口已打开,聚焦到该窗口(不改变 URL)。适合希望用户回到当前任务场景。
  • navigate-existing:如果 PWA 窗口已打开,将现有窗口导航到新的 URL。适合需要响应深层链接的场景。
  • navigate-new:始终创建新的 PWA 窗口。适合多窗口工作流的应用。
  • auto(默认):由浏览器决定最佳行为,通常等同于 navigate-existing。
如何在 manifest.json 中配置 Launch Handler?

在 manifest.json 中添加 launch_handler 字段:

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

也可以使用数组提供回退选项:

{
  "launch_handler": {
    "client_mode": ["focus-existing", "navigate-existing"]
  }
}
Launch Handler 的浏览器兼容性如何?

目前 Launch Handler API 主要在 Chromium 内核浏览器中支持(Chrome 98+、Edge 98+)。Firefox 和 Safari 尚未完全支持该特性。建议使用渐进增强策略:在支持的浏览器中提供更好的体验,在不支持的浏览器中回退到默认行为。

可以通过检查 window.launchQueue 或在 manifest 中设置 fallback 值来实现兼容。

route_to 与 client_mode 如何配合使用?

route_to 提供更细粒度的控制,可针对不同启动来源设置不同行为:

  • existing-client:路由到现有 PWA 客户端
  • new-client:创建新的 PWA 客户端
  • existing-client-navigate:路由到现有客户端并导航

还可以通过 launching_from 针对特定来源(如 "share-target""navigate")设置不同的 route_to 行为。

最佳实践和常见陷阱有哪些?
  • 测试多窗口场景:确保在多个 PWA 窗口同时打开时行为符合预期。
  • 处理深层链接:使用 navigate-existing 时确保应用能正确处理不同 URL 的导航。
  • 移动端限制:移动端通常只有一个应用实例,navigate-new 可能不生效。
  • 与 share_target 配合:分享目标启动时,确保 route_to 配置合理。
  • 渐进增强:始终提供合理的默认行为作为回退。