manifest:display_override 的「tabbed」模式
发布于
manifest:display_override 的「tabbed」模式 —— 在清单的 display_override 数组中加入
"tabbed",并配合可选的 tab_strip 字段,可以让 PWA 打开一个应用窗口,用标签栏在应用作用
域内的多个文档之间切换,而不是为每个文档打开一个新窗口。
浏览器与生态支持
Section titled “浏览器与生态支持”- 图例
- 支持
- 部分支持
- 需开启标志
- 不支持
- 未知
| 浏览器 / 平台 | 支持 | 版本 | 置信度 | 来源 | 备注 |
|---|---|---|---|---|---|
| Chrome (Desktop) | 支持 | 126 | 高 | 来源 | — |
| Chrome (Android) | 支持 | 126 | 高 | 来源 | 1 |
| Edge (Desktop) | 支持 | 126 | 高 | 来源 | 2 |
| Firefox (Desktop) | 不支持 | — | 高 | 来源 | 3 |
| Firefox (Android) | 不支持 | — | 高 | 来源 | 45 |
| Safari (macOS) | 不支持 | — | 高 | 来源 | 6 |
| Safari (iOS) | 不支持 | — | 高 | 来源 | 78 |
| Samsung Internet | 支持 | 28.0 | 高 | 来源 | 9 |
| WebView (Android) | 不支持 | — | 高 | 来源 | 10 |
- 由 browser-compat-data 镜像自 Chrome 的数据推导。
- 由 browser-compat-data 镜像自 Chrome 的数据推导。
- browser-compat-data 未记录 Firefox 的支持。
- browser-compat-data 未记录 Firefox for Android 的支持。
- 由 browser-compat-data 镜像自 Firefox 的数据推导。
- browser-compat-data 未记录 Safari 的支持。
- browser-compat-data 未记录 iOS 版 Safari 的支持。
- 由 browser-compat-data 镜像自 Safari 的数据推导。
- 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
- browser-compat-data 未记录 WebView Android 的支持。
根据 Chrome for Developers 的说明,标签式应用模式“属于 capabilities 项目的一部分,目前已在
ChromeOS 上发布”。MDN 的兼容性数据将 tabbed 标记为实验性功能,并记录 Firefox 和 Safari
不支持它。
声明 tabbed 显示模式
Section titled “声明 tabbed 显示模式”根据 Chrome for Developers 的说明,"tabbed" 必须通过 display_override 声明,而不能写在
display 中,因为它对不支持该模式的浏览器不具备向后兼容性:
{ "display": "standalone", "display_override": ["tabbed"], "tab_strip": { "new_tab_button": { "url": "/new" } }}如果省略 tab_strip,根据 Chrome for Developers 的文档,它将默认使用一个 new_tab_button,
其 url 为清单的 start_url。
检测标签栏是否已启用
Section titled “检测标签栏是否已启用”根据 WICG 的 tabbed-mode 说明文档,应用通过 display-mode 媒体特性的 tabbed 取值来检测
标签栏,这与检测其他显示模式使用相同的机制:
function hasTabStripEnabled() { if (!('matchMedia' in window)) { // 不支持 matchMedia —— 假定没有标签栏。 return false; } return window.matchMedia('(display-mode: tabbed)').matches;}
if (hasTabStripEnabled()) { // 当前带有标签栏——跳过页面内自制的标签 UI。} else { // 没有标签栏:改为渲染应用自己的文档切换界面。}- 不要把
"tabbed"直接写进display:根据 WICG 说明文档,它只在display_override中有效,两者都不支持的浏览器会回退到下一个取值(或display)。 - Chrome for Developers 称标签式应用模式已在 ChromeOS 上发布——请确保应用在标签栏没有 出现时也能正常工作。
- 根据 Chrome for Developers 的说明,独立的浏览器标签可提供资源隔离。对于开发者自行构建 的标签,导航历史和“复制此页链接”等浏览器功能作用于标签界面页面,而不是当前选中的文档页面。
- 如果配置了
home_tab,它不应发生导航;Chrome for Developers 称,从该标签点击的链接应在 新的应用标签中打开。
- manifest:display_override 支持 ——
"tabbed"正是通过这个回退链字段声明的。 - manifest:launch_handler 支持 —— 控制启动时 是打开新标签还是复用现有应用窗口。
← 返回兼容性浏览器。