跳转到内容

display_override:选用 window-controls-overlay 与 tabbed 模式

一句话: display 只能表达其固定回退链上的四个值 (fullscreenstandaloneminimal-uibrowser)。display_override 是一个 有序数组,浏览器会在回退到 display 之前逐项遍历它——因此它正是你选用 window-controls-overlaytabbed 等较新模式,又不丢失旧浏览器安全回退的途径。

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/"
}

浏览器严格按顺序评估 display_override,随后回退到 display

  1. 从左到右遍历 display_override。使用第一个有效且受支持的显示模式条目。
  2. 若无任何条目匹配(全部未知或不受支持),则完全忽略 display_override,回退到普通的 display 值及其常规链。

由此得出两个推论:

  • 未知条目被跳过,而非致命。 一个从未听说过 window-controls-overlay 的旧浏览器只是 移到下一个条目,于是 manifest 优雅降级而非崩坏。
  • display_override 不继承 display 的回退链。 列出 ["fullscreen"] 不会display: "fullscreen" 那样自动回落到 standalone。在覆盖数组内,每个条目都被单独考量; 只有当浏览器落到 display 值时,链才重新生效。
  • window-controls-overlay —— 在桌面端,应用的网页内容向上延伸进标题栏区域,而窗口 控件(关闭/最小化/最大化)覆盖在你的内容之上。你获得完整的窗口高度来放置自定义工具栏。 使用 titlebar-area-* 环境变量与 navigator.windowControlsOverlay API 来布局一个避开 操作系统控件的区域。
  • tabbed —— 为已安装的应用提供其自有的应用内标签栏,让用户在一个应用窗口内同时打开 多个应用页面。支持面更窄,且仍在演进。
  • standalone / minimal-ui / fullscreen / browser —— 普通的 display 值在 display_override 内同样合法,这纯粹用作在隐式 display 回退生效之前的显式回退条目。

你能在 display_override 内列出的模式仍属实验性、支持有限,且彼此各异。所引 MDN 参考把 window-controls-overlay 与较新的显示模式标记为实验性,并指引你查阅每个特性的浏览器 兼容性表——在依赖某个模式前,把这些表当作权威依据,并务必为任何覆盖搭配一个获得广泛支持的 display 值。

  • 可安装性同样把 display_override 计入。 据 MDN 的可安装性指南,基于 Chromium 的 浏览器要求 manifest 包含 display 和/或 display_override,因此列出覆盖模式本身即可 满足该部分标准。但为获得最广覆盖,仍应保留一个能以应用式窗口启动的 display 值。
  • scope 仍约束 chrome 处理。 当用户导航到 scope 之外时,浏览器通常会显示一个醒目的 UI 元素(例如地址栏)以提示上下文。没有什么强制应用上下文停留在范围内,但覆盖层或标签栏 意在用于从 start_url 启动的范围内应用。
  • 设置一个安全的 display(通常为 standalone),覆盖可安装性与旧浏览器。
  • 按真实优先顺序列出覆盖模式——第一个受支持的条目胜出。
  • 不要指望 display_overridedisplay 那样在自身列表内回落。
  • window-controls-overlay,用 titlebar-area-* 环境变量与相应 API 把内容布局在 避开窗口控件之处;测试未授予覆盖层的情形。
  • 在假定覆盖层已激活前,特性检测 navigator.windowControlsOverlay
  • tabbed 当作渐进增强;在每个目标浏览器上验证行为。