啟動 Handler API

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

您可使用 Launch Handler API 控制應用程式的啟動方式,例如應用程式使用現有視窗或新的視窗,以及選擇的視窗是否會導向至啟動網址。與 File Handing API 一樣,這樣做也會在已啟動頁面的 window.launchQueue 中將 LaunchParams 物件排入佇列。

目前狀態

步驟 狀態
1. 建立說明 完成
2. 建立規格的初始草稿 完成
3. 收集意見回饋並反覆改進設計 完整
4. 來源試用。 完整
5. 發布 完成

使用 Launch Handler API

瀏覽器支援

啟動處理常式僅適用於 ChromeOS。

瀏覽器支援

  • 110
  • 110
  • x
  • x

資料來源

介面

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 物件 (其 targetURL 已設為啟動網址) 會排入文件的 window.launchQueue 中。
    • 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 Demo 中查看 Launch Handler API 的實際運作情況。請務必查看應用程式的原始碼,瞭解應用程式如何使用 Launch Handler API。

  1. 在 ChromeOS 裝置上安裝 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. 按一下即時通訊應用程式中的連結,您會發現「音樂人 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,並告訴我們您的使用地點和方式。

實用連結