啟動 Handler API

控管應用程式的啟動方式。

您可以使用 Launch Handler API 控管應用程式的啟動方式,例如使用現有或新視窗,以及是否要導覽至啟動網址。與 File Handling API 一樣,這也會在啟動頁面的 window.launchQueue 中排入 LaunchParams 物件。

目前狀態

步驟 狀態
1. 建立說明 完成
2. 建立規格初稿 完成
3. 收集意見回饋並重複設計 完成
4. 來源試用。 完成
5. 發布 完成

使用 Launch Handler API

瀏覽器支援

瀏覽器支援

  • Chrome:110。
  • Edge:110。
  • Firefox:不支援。
  • Safari:不支援。

資料來源

介面

Launch Handler API 定義了兩個新介面。

LaunchParams:包含由消費者處理的 targetURL 物件。LaunchQueue:佇列會啟動,直到指定的消費者處理為止。

launch_handler 資訊清單成員

如要以宣告方式指定應用程式的啟動行為,請在資訊清單中新增 launch_handler 資訊清單成員。其中包含一個名為 client_mode 的子欄位。您可以透過這項政策控制系統是否應啟動新用戶端或現有用戶端,以及是否應導覽至這個用戶端。以下範例顯示含有示範值的檔案,該檔案會一律將所有啟動作業導向新用戶端。

{
  "launch_handler": {
    "client_mode": "navigate-new"
  }
}

如果未指定,launch_handler 預設為 {"client_mode": "auto"}。子欄位的有效值如下:

  • client_mode
    • navigate-new:在網頁應用程式視窗中建立新的瀏覽內容,以載入啟動目標網址。
    • navigate-existing:在網頁應用程式視窗中,最近與瀏覽內容互動的內容會導向啟動目標網址。
    • focus-existing:系統會選擇最近與網頁應用程式視窗中的瀏覽內容互動的內容,用於處理啟動作業。新的 LaunchParams 物件會在文件的 window.launchQueue 中排入佇列,其 targetURL 會設為啟動網址。
    • auto:行為取決於使用者代理程式,決定最適合平台的行為。舉例來說,行動裝置只支援單一用戶端,因此會使用 existing-client,而電腦裝置支援多個視窗,因此會使用 navigate-new 避免資料遺失。

client_mode 屬性也接受值清單 (陣列),並使用第一個有效值。這麼做是為了讓新的值可新增至規格,而不會破壞與現有實作的回溯相容性。

舉例來說,如果新增假設值 "focus-matching-url",網站會指定 "client_mode": ["focus-matching-url", "navigate-existing"],繼續控制不支援 "focus-matching-url" 的舊版瀏覽器行為。

使用 window.launchQueue

在以下程式碼中,extractSongID() 函式會從啟動時傳遞的網址中擷取 songID。用於在音樂播放器 PWA 中播放歌曲。

if ('launchQueue' in window) {
  launchQueue.setConsumer((launchParams) => {
    if (launchParams.targetURL) {
      const songID = extractSongId(launchParams.targetURL);
      if (songID) {
        playSong(songID);
      }
    }
  });
}

示範

您可以在 PWA 啟動處理常式示範中,查看 Launch Handler API 的實際運作情形。請務必查看應用程式的原始碼,瞭解應用程式如何使用 Launch Handler API。

  1. 安裝 Musicr 2.0 應用程式。
  2. 透過即時通訊應用程式傳送 https://launch-handler.glitch.me?track=https://example.com/music.mp3 格式的連結給自己。(您可以為任何指向音訊檔案的網址自訂 https://example.com/music.mp3,例如 https://launch-handler.glitch.me?track=https://cdn.glitch.me/3e952c9c-4d6d-4de4-9873-23cf976b422e%2Ffile_example_MP3_700KB.mp3?v=1638795977190)。
  3. 點選聊天室應用程式中的連結,看看 Musicr 2.0 如何開啟並播放曲目。
  4. 再次點選即時通訊應用程式中的連結,您就不會收到第二個 Musicr 2.0 例項。

意見回饋

Chromium 團隊希望瞭解您使用 Launch Handler API 的體驗。

請告訴我們 API 設計

API 是否有任何功能無法正常運作?或者,您是否缺少實作想法所需的方法或屬性?對於安全性模型有任何問題或意見嗎?在對應的 GitHub 存放區中提出規格問題,或在現有問題中加入您的想法。

回報實作問題

你是否發現 Chromium 實作項目有錯誤?或者實作方式與規格不同?請前往 new.crbug.com 回報錯誤。請務必提供盡可能多的詳細資料、重現問題的操作說明,並在「Components」方塊中輸入 Blink>AppManifestGlitch 非常適合用於分享快速重現問題的資訊。

顯示對 API 的支援

您打算使用 Launch Handler API 嗎?您公開表示的支持,有助於 Chromium 團隊將功能列為優先,並向其他瀏覽器供應商顯示,支援這些功能的重要性。

使用主題標記 #LaunchHandler 發送推文給 @ChromiumDev,告訴我們你在何處使用這項功能,以及使用方式。

實用連結