跳转到内容

Manifest · 清单成员

handle_links 清单成员

发布于 更新于

有限可用不支持的浏览器: Chrome (Desktop)说明文档

handle_links 是一个提案中的清单成员,写在 WICG 的 pwa-url-handler 说明文档里:已安装的 PWA 用它 告诉浏览器,指向其 scope 内的链接是否应在已安装的应用窗口中打开,而不是在浏览器标签页中。该成员取 三个字符串值之一,而且只是提示,不是保证:用户代理仍可以让用户偏好压过清单。

没有任何引擎实现它。chromestatus.com 上 Chromium 的条目把实现状态列为 “On hold”,没有 origin trial,也没有里程碑;Firefox 与 Safari 未发表任何立场(chromestatus.com,feature 5740751225880576)。Chrome 155 解析清单时把它当作未知键静默丢弃。Chromium 里倒是有链接捕获,但它是 按应用设置的用户选项,不是清单声明。

  • 类型:字符串,"auto"、"preferred" 或 "not-preferred" 之一。
  • 默认值:成员缺失或取其他值时为 "auto",由用户代理按平台惯例决定。
  • 示例值:"preferred"。

preferred 请求用户代理在已安装应用中打开作用域内链接;not-preferred 请求保留在浏览器中; auto 交给平台。说明文档的“非目标”划定了边界:它不扩大 scope(那是 scope_extensions 的事), 也不决定链接落到应用内之后发生什么(那是 launch_handler 的事)。它只回答一个问题:作用域内的 链接到底会不会到达应用。

实际行为由已经发布的机制决定。桌面版 Chrome 155 与 Edge 154 在应用设置页(chrome://apps,右键, App settings)提供名为 Opening supported links 的按应用开关,选项是 Open in [应用名]; 默认关闭,清单无法改变它。Android 版 Chrome 在站点的 assetlinks.json 通过 Digital Asset Links 验证了应用后,会把链接捕获进 WebAPK,同样不读清单。

第一个示例展示提案的语法;第二个展示在 Chromium 中真正可用于处理被捕获链接的成员。

该成员位于顶层,与 scope 并列。start_url 必须保持在 scope 之内,声明的边界才会生效;否则 用户代理会回退到从 start_url 推导的作用域(w3.org,Web Application Manifest “scope member”), handle_links 覆盖的链接就不再是作者想要的那些。

{
"name": "Tracker",
"start_url": "/app/",
"scope": "/app/",
"handle_links": "preferred"
}

这份清单在任何地方都有效,因为未知成员会被忽略。在 Chrome 155 上这一行不改变任何行为;它只是为 将来可能实现该说明文档的浏览器记录意图。

用 launch_handler 与 launchQueue 路由被捕获的链接

Section titled “用 launch_handler 与 launchQueue 路由被捕获的链接”

用户为应用开启链接捕获后,Chrome 110+ 会启动已安装应用,并通过 LaunchParams.targetURL 报告被 点击的 URL。把 launch_handler 与 launchQueue 消费者配合使用,可以只保留一个窗口并就地导航; 没有消费者时,浏览器会在新的应用窗口中打开该 URL。

{
"launch_handler": { "client_mode": "navigate-existing" }
}
if ('launchQueue' in window) {
window.launchQueue.setConsumer((launchParams) => {
if (!launchParams.targetURL) return; // 从图标启动,无需路由。
const url = new URL(launchParams.targetURL);
router.navigate(url.pathname + url.search);
});
} else {
// Firefox 157 与 Safari 27:链接在标签页中打开,页面正常加载该 URL。
}

让被捕获的链接复用已打开窗口的是 client_mode: "navigate-existing";launchQueue 消费者只在 客户端路由时才需要。加载时按 URL 渲染的页面两者都不需要。

规范

规范状态
Web 应用清单:handle_links说明文档
Web Application Manifest: scope memberW3C
  • 图例
  • 支持
  • 部分支持
  • 需开启标志
  • 不支持
  • 未知
浏览器 / 平台支持版本置信度来源备注
Chrome (Desktop)不支持—中来源1

源数据: /compatibility/manifest-handle-links.json · 全球使用占比: 0 % (StatCounter 2026-05)

来源: 规范 · MDN · 最近核验 2026-09-07 · 置信度: 中 (由来源计算)