manifest: handle_links 支持情况
发布于 更新于
manifest: handle_links —— 一个 WICG 提案中的 Web App Manifest 成员,让已安装的
PWA 建议范围内的链接是否应在应用内打开而非浏览器中打开,取值为 preferred、
not-preferred 和默认值 auto。
浏览器与生态支持
Section titled “浏览器与生态支持”- 图例
- 支持
- 部分支持
- 需开启标志
- 不支持
- 未知
| 浏览器 / 平台 | 支持 | 版本 | 置信度 | 来源 | 备注 |
|---|---|---|---|---|---|
| Chrome (Desktop) | 不支持 | — | 中 | 来源 | 1 |
- chromestatus.com 把该特性自身的实现状态记录为「On hold」,没有发布里程碑。
根据 chromestatus.com 的记录,Chrome 将该特性自身的实现状态标记为“On hold” (暂缓),且没有记录任何发布里程碑。
在 manifest 中声明该成员,取值为以下三者之一:
{ "handle_links": "preferred"}根据该 explainer 的说明,preferred 意味着“用户代理应在已安装的应用内打开范围内
的链接”,not-preferred 意味着不应这样做,而 auto——省略该成员时的默认值——
意味着“用户代理应为该平台选择合适的行为”。该 explainer 将这些取值描述为给用户代理
的建议,而非必须遵循的指令。
运行时检测与回退
Section titled “运行时检测与回退”该 explainer 没有定义能把 handle_links 支持情况回传给页面的 JavaScript
API——它只把这个成员描述为一种 manifest 层面的偏好设置。下面的代码从页面已有的
manifest 对象(例如通过 fetch('manifest.json').then(r => r.json()) 获取并解析
得到的对象)中把 handle_links 读取出来,并在成员缺失时提供回退:
async function getHandleLinksPreference(manifest) { if (!('handle_links' in manifest)) { // 成员被省略——explainer 指出默认值为 "auto"。 return 'auto'; } return manifest.handle_links;}这只是把声明的偏好值读取回来;它无法确认浏览器是否真的在遵循这个偏好,因为
explainer 并未把这一点回传给页面。因此,不应构建依赖 handle_links 生效才能
工作的链接导航——保留范围内的链接为普通 <a> 标签,让 handle_links(或其缺失)
自行生效。
- 根据 chromestatus.com 的记录,该特性在 Chrome 中的实现状态为“On hold”,且没有
发布里程碑——不要依赖
preferred在当前生产环境中生效。 - 根据该 explainer 的说明,对于
preferred,用户代理“应当(should)”在应用内 打开范围内的链接;对于not-preferred则“不应(should not)”这样做;只有auto明确将选择权交给“适合该平台的行为”。 - 根据该 explainer 的说明,
handle_links作用于应用 manifest 的 scope;当 manifest 中同时声明了scope_extensions时,该资格范围会扩展到其中列出的 额外源。 - 当 manifest 中省略
handle_links时,默认值为auto。
- manifest: scope 支持情况 —— 定义了
handle_links所依赖的 scope 边界。 - manifest: launch_handler 支持情况 —— 另一个控制已安装 PWA 启动方式的相关 manifest 成员。
← 返回兼容性浏览器。