PWA 的标签页式应用模式

在渐进式 Web 应用中使用标签页,一次处理多个文档

在计算领域,桌面比喻是 一种接口隐喻,是图形界面 (GUI) 使用的一组统一概念, 可帮助用户与计算机进行更轻松的互动。与桌面上的隐喻保持一致 是仿照书籍、纸质文件或卡片索引中插入的传统卡片标签建模的。标签式 文档界面 (TDI) 或标签页是一种图形控制元素,可允许 多个面板包含在单个窗口中,使用标签作为导航 widget 进行切换 文档集之间的重要性。

渐进式 Web 应用可在各种显示模式下运行,该模式由 display 属性。示例包括 fullscreenstandaloneminimal-ui、 和 browser。这些显示模式遵循 明确定义的后备链 ("fullscreen""standalone""minimal-ui""browser")。如果浏览器不支持 指定的模式,便会回退到链中的下一个显示模式。通过 "display_override" 属性,开发者可以指定自己的后备链 如果需要的话。

什么是标签页式应用模式

到目前为止,该平台还缺少某种可让 PWA 开发者提供他们的 用户使用标签页式文档界面,例如,让用户能够在同一 PWA 中编辑不同的文件 窗口。标签页式应用模式填补了这一空白。

标签页式应用模式的建议用例

可以使用标签页式应用模式的网站示例包括:

  • 可让用户同时编辑多个文档(或文件)的效率应用。
  • 可让用户在每个标签页的不同聊天室中进行对话的通信应用。
  • 朗读应用可在新的应用内标签页中打开文章链接。

与开发者构建的标签页的差异

将文档保存在单独的浏览器标签页中,可以免费使用资源隔离功能, 可能性高低。开发者构建的标签页无法扩展到数百个标签页 和浏览器标签页一样浏览器功能,例如导航历史记录、“复制此页面网址”“投放” 此标签页”或“在网络浏览器中打开此页面”将应用于开发者构建的标签页 而不是当前选定的文档页面。

"display": "browser" 的差异

当前的 "display": "browser" 已有 具体含义

按照平台专用惯例打开 Web 应用,以在 用户代理(例如,在浏览器标签页或新窗口中)。

虽然浏览器可以随意在界面方面做任何事情,但这显然是一个相当大的 Subversion 如果 "display": "browser" 突然意味着“在单独的 特定于应用的窗口,不提供标签式文档界面”。

设置 "display": "browser" 实际上是您选择不退出应用的方式 窗口。

当前状态

步骤 状态
1. 创建铺垫消息 已完成
2. 创建规范的初始草稿 尚未开始
3. 收集反馈和对设计进行迭代 进行中
4. 源试用 进行中
5. 发布 尚未开始

使用标签页式应用模式

要使用标签页式应用模式,开发者需要为其应用选择启用 Web 应用清单中的 "display_override" 模式值。

{
  "display": "standalone",
  "display_override": ["tabbed"]
}

接下来,可以选择性地使用属性 "tab_strip" 来微调标签页行为。它有两个 允许的子属性 "home_tab""new_tab_button"。如果 "tab_strip" 属性不是 特定属性的使用了 "auto" 值。浏览器会确定 用于 "auto"

“首页”标签页

“首页”标签页是一个固定标签页;如果为某个应用启用了该标签页,则在应用打开该标签页时,应始终显示该标签页 打开。此标签页不应进行导航。从此标签页点击的链接应该会在新的应用标签页中打开。应用 可以选择自定义此标签页锁定的网址以及该标签页上显示的图标。

允许的 "home_tab" 值为:

  • "auto":让浏览器确定要执行的操作。
  • "absent" 指示浏览器不显示“首页”标签页。
  • 一个包含两个子属性的对象: <ph type="x-smartling-placeholder">
      </ph>
    • "url" 替换为允许的值 "auto",或将首页标签页锁定到的网址。
    • "icons" 替换为允许的 "auto" 值或主图标数组中的图标数组 "icons" 属性

新标签页按钮

新标签页按钮(如果存在)会在应用作用域内的网址上打开一个新标签页。 应用可选择为此按钮设置自定义网址和图标。浏览器可以决定如何处理 您可以随意拖动这些标签页以创建新窗口,或与浏览器标签页合并。

允许的 "new_tab_button" 值为:

  • "auto":让浏览器确定要执行的操作。
  • "absent",用于告知浏览器不显示新标签页按钮。
  • 一个包含两个子属性的对象: <ph type="x-smartling-placeholder">
      </ph>
    • "url" 替换为允许的值 "auto",或用于打开新标签页的网址在范围内网址。
    • "icons" 替换为允许的 "auto" 值或主图标数组中的图标数组 "icons" 属性

完整示例

下面提供了一个用于配置具有标签页式界面的应用行为的完整示例:

{
  "display_override": ["tabbed"],
  "tab_strip": {
    "home_tab": {
      "url": "./home/",
      "icons": [
        {
          "src": "./home.svg",
          "sizes": "any",
          "type": "image/svg+xml"
        }
      ]
    },
    "new_tab_button": {
      "url": "./new-tab/",
      "icons": [
        {
          "src": "./new-tab.svg",
          "sizes": "any",
          "type": "image/svg+xml"
        }
      ]
    }
  }
}

检测标签页式应用模式

应用可以检测自己是否在标签页式应用模式下运行,方法是检查 display-mode CSS 媒体功能 (如 CSS 或 JavaScript):

@media (display-mode: tabbed) {
  /* Styles to apply in tabbed application mode. */
}
const tabbedApplicationModeEnabled = window.matchMedia('(display-mode: tabbed)').matches;

与 Launch Handler API 交互

Launch Handler API 可让网站重定向应用 启动到现有应用窗口中,以防止重复打开的窗口。当 标签页式应用集为 "client_mode": "navigate-new",应用启动时会在 现有应用窗口中

演示

您可以设置浏览器标志来试用标签页式应用模式:

  1. 设置 #enable-desktop-pwas-tab-strip 标志。
  2. 安装应用 tabbed-application-mode.glitch.me源代码)。
  3. 点击不同标签页上的不同链接。

tabbed-application-mode.glitch.me 上的标签页式应用模式演示屏幕截图。

反馈

Chrome 团队希望了解您使用标签页式应用模式的体验。

向我们介绍 API 设计

标签页式应用模式是否存在无法按照您预期的方式工作的情况?对以下内容发表评论: 我们创建的Web 应用清单问题

报告实现存在的问题

您在 Chrome 的实现过程中是否发现了错误?通过以下网址报告错误: new.crbug.com.请务必提供尽可能多的细节信息,内容要简单明了 并在组件框中输入 UI>Browser>WebAppInstallsGlitch 非常适合用于分享快速简便的重现案例。

表示对 API 的支持

您是否打算使用标签页式应用模式?您的公开支持对 Chrome 团队有所帮助 确定功能的优先级,并向其他浏览器供应商展示支持这些功能的重要性。

使用 # 标签向 @ChromiumDev 发送推文 #TabbedApplicationMode 并告诉我们您使用它的地点和方式。

致谢

Matt Giuca 探索了标签页式应用模式。实验性 Alan Cutter 的工作成果才能在 Chrome 中顺利实现。本文 由 Joe Medley 审核。主打图片提供方 Till Niermann维基共享资源