display_override:选用 window-controls-overlay 与 tabbed 模式
一句话: display 只能表达其固定回退链上的四个值
(fullscreen → standalone → minimal-ui → browser)。display_override 是一个
有序数组,浏览器会在回退到 display 之前逐项遍历它——因此它正是你选用
window-controls-overlay、tabbed 等较新模式,又不丢失旧浏览器安全回退的途径。
为什么需要 display_override
Section titled “为什么需要 display_override”display 是限定在单一链上的单个值。仅凭 display 无法表达“能用就用
window-controls-overlay,否则表现得像 standalone”,因为
window-controls-overlay 不在那条链上。display_override 解决了这一点:它让你按优先
顺序列出偏好的模式,浏览器使用其中第一个它既能识别又支持的模式。
{ "display": "standalone", "display_override": ["window-controls-overlay", "minimal-ui"], "scope": "/app/", "start_url": "/app/"}浏览器如何解析它
Section titled “浏览器如何解析它”浏览器严格按顺序评估 display_override,随后回退到 display:
- 从左到右遍历
display_override。使用第一个有效且受支持的显示模式条目。 - 若无任何条目匹配(全部未知或不受支持),则完全忽略
display_override,回退到普通的display值及其常规链。
由此得出两个推论:
- 未知条目被跳过,而非致命。 一个从未听说过
window-controls-overlay的旧浏览器只是 移到下一个条目,于是 manifest 优雅降级而非崩坏。 display_override不继承display的回退链。 列出["fullscreen"]不会像display: "fullscreen"那样自动回落到standalone。在覆盖数组内,每个条目都被单独考量; 只有当浏览器落到display值时,链才重新生效。
你真正解锁的模式
Section titled “你真正解锁的模式”window-controls-overlay—— 在桌面端,应用的网页内容向上延伸进标题栏区域,而窗口 控件(关闭/最小化/最大化)覆盖在你的内容之上。你获得完整的窗口高度来放置自定义工具栏。 使用titlebar-area-*环境变量与navigator.windowControlsOverlayAPI 来布局一个避开 操作系统控件的区域。tabbed—— 为已安装的应用提供其自有的应用内标签栏,让用户在一个应用窗口内同时打开 多个应用页面。支持面更窄,且仍在演进。standalone/minimal-ui/fullscreen/browser—— 普通的display值在display_override内同样合法,这纯粹用作在隐式display回退生效之前的显式回退条目。
浏览器与生态支持
Section titled “浏览器与生态支持”你能在 display_override 内列出的模式仍属实验性、支持有限,且彼此各异。所引 MDN 参考把
window-controls-overlay 与较新的显示模式标记为实验性,并指引你查阅每个特性的浏览器
兼容性表——在依赖某个模式前,把这些表当作权威依据,并务必为任何覆盖搭配一个获得广泛支持的
display 值。
display_override、可安装性与 scope
Section titled “display_override、可安装性与 scope”- 可安装性同样把
display_override计入。 据 MDN 的可安装性指南,基于 Chromium 的 浏览器要求 manifest 包含display和/或display_override,因此列出覆盖模式本身即可 满足该部分标准。但为获得最广覆盖,仍应保留一个能以应用式窗口启动的display值。 - scope 仍约束 chrome 处理。 当用户导航到
scope之外时,浏览器通常会显示一个醒目的 UI 元素(例如地址栏)以提示上下文。没有什么强制应用上下文停留在范围内,但覆盖层或标签栏 意在用于从start_url启动的范围内应用。
- 设置一个安全的
display(通常为standalone),覆盖可安装性与旧浏览器。 - 按真实优先顺序列出覆盖模式——第一个受支持的条目胜出。
- 不要指望
display_override像display那样在自身列表内回落。 - 对
window-controls-overlay,用titlebar-area-*环境变量与相应 API 把内容布局在 避开窗口控件之处;测试未授予覆盖层的情形。 - 在假定覆盖层已激活前,特性检测
navigator.windowControlsOverlay。 - 把
tabbed当作渐进增强;在每个目标浏览器上验证行为。