PWA 適用的分頁式應用程式模式

透過漸進式網頁應用程式中的分頁,一次處理多份文件

在運算的領域,「桌面隱喻」是一種介面隱喻,是圖形使用者介面 (GUI) 使用的一組統一概念,可協助使用者更輕鬆地與電腦互動。為了和桌面的風格一致,GUI 分頁會以插入書籍、紙本檔案或卡片索引中的傳統卡片分頁的方式模擬。分頁式文件介面 (TDI) 或分頁是一種圖形控制元素,可在單一視窗中顯示多個文件或面板,並將分頁當做導覽小工具,用來在多組文件之間切換。

Progressive Web Apps 能以各種顯示模式執行,視網頁應用程式資訊清單中的 display 屬性而定。例如 fullscreenstandaloneminimal-uibrowser。這些顯示模式會遵循明確定義的備用鏈 ("fullscreen""standalone""minimal-ui""browser")。如果瀏覽器不支援特定模式,就會切換回鏈結中的下一個顯示模式。開發人員可以透過 "display_override" 屬性,視需要指定自己的備用鏈。

什麼是分頁式應用程式模式

目前平台中缺少的功能是讓 PWA 開發人員為使用者提供分頁式文件介面的方法,例如能夠在相同 PWA 視窗中編輯不同檔案。分頁式應用程式模式會消除這個差距。

分頁式應用程式模式的建議用途

以下列舉一些可能使用分頁式應用程式模式的網站:

  • 可讓使用者同時編輯多個文件 (或檔案) 的效率提升應用程式。
  • 讓使用者在每個分頁在不同討論室中進行對話的通訊應用程式。
  • 閱讀會在新的應用程式內分頁中開啟文章連結的應用程式。

與開發人員建構分頁的差異

將文件放在個別瀏覽器分頁中可以免費使用資源隔離,這是目前的網路功能不可能的。開發人員建構的分頁無法像瀏覽器分頁一樣能縮放到數百個分頁。瀏覽歷史記錄、「複製這個頁面網址」、「投放這個分頁」或「在網路瀏覽器中開啟此頁面」等瀏覽器用途只能套用到開發人員建構的分頁式介面,但並非目前所選的文件頁面。

"display": "browser" 的差異

目前的 "display": "browser" 已有特定意義

按照平台專屬的慣例,在使用者代理程式中開啟超連結 (例如在瀏覽器分頁或新視窗中),開啟網頁應用程式。

雖然瀏覽器可以對 UI 執行任何動作,但如果 "display": "browser" 突然刻意「在沒有瀏覽器預設用途的獨立視窗中執行,但採用分頁式文件介面」,這顯然是開發人員對 UI 的期望不大。

設定 "display": "browser" 可有效選擇不進入應用程式視窗。

目前狀態

步驟 狀態
1. 建立說明 已完成
2. 建立規格的初始草稿 Not started
3. 收集意見回饋並改進設計 進行中
4. 來源試用 進行中
5. 推出 Not started

使用分頁式應用程式模式

如要使用分頁式應用程式模式,開發人員必須在網頁應用程式資訊清單中設定特定的 "display_override" 模式值,將其應用程式加入分頁。

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

接下來,您可以選擇使用 "tab_strip" 屬性來調整分頁行為。它有兩個允許的子資源:"home_tab""new_tab_button"。如果 "tab_strip" 屬性不存在,則會使用特定屬性的 "auto" 值。瀏覽器會判斷 "auto" 要使用的值。

「首頁」分頁

「首頁」分頁是固定分頁,如果應用程式已啟用該功能,應在應用程式開啟時一律顯示。請勿瀏覽這個分頁。在這個分頁中點選的連結應該會在新的應用程式分頁中開啟。應用程式可以選擇自訂這個分頁鎖定的網址,以及分頁上顯示的圖示。

允許的 "home_tab" 值如下:

  • "auto":可讓瀏覽器判斷要執行的動作。
  • "absent":指示瀏覽器不要顯示首頁分頁。
  • 含有兩個子屬性的物件:
    • "url" 替換為允許的值 "auto",或鎖定首頁分頁的網址。
    • "icons" 且包含 "auto" 允許的值或圖示陣列,如主要 "icons" 屬性中所示。

新分頁按鈕

這個分頁 (如有) 應使用位於應用程式範圍內的網址開啟新分頁。應用程式可以選擇為這個按鈕設定自訂網址和圖示。瀏覽器可以決定如何處理這些分頁四處拖曳以建立新的視窗,或與瀏覽器分頁合併。

允許的 "new_tab_button" 值如下:

  • "auto":可讓瀏覽器判斷要執行的動作。
  • "absent":指示瀏覽器不要顯示新分頁按鈕。
  • 含有兩個子屬性的物件:
    • "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"
        }
      ]
    }
  }
}

偵測分頁式應用程式模式

應用程式可以檢查 CSS 或 JavaScript 中的 display-mode CSS 媒體功能,偵測其是否以分頁式應用程式模式執行:

@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 設計

有不是與分頁式應用程式模式相關的功能呢?請針對我們建立的網頁應用程式資訊清單問題留言。

回報導入問題

您在執行 Chrome 時發現錯誤了嗎?請前往 new.crbug.com 回報錯誤。請務必盡可能提供最多的詳細資料、簡單的重現操作說明,並在「元件」方塊中輸入 UI>Browser>WebAppInstallsGlitch 適合用來分享快速輕鬆地重現案件的情況。

展現對 API 的支援

您打算使用分頁式應用程式模式嗎?您的公開支援可協助 Chrome 團隊決定功能的優先順序,讓其他瀏覽器廠商瞭解這項功能有多重要。

請使用主題標記 #TabbedApplicationMode 將 Tweet 訊息傳送至 @ChromiumDev,告訴我們您的使用地點和方式。

特別銘謝

Matt Giuca 探索分頁式應用程式模式。Chrome 中的實驗性實作是以 Alan Cutter 為基礎。本文是由 Joe Medley 審查。主頁橫幅由 Till NiermannWikimedia Commons 發布。