啟動處理程式 API

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

啟動處理程式 API 允許開發者控制漸進式 Web 應用 (PWA) 的啟動方式——例如,它是否使用現有視窗或建立新視窗,以及如何處理應用的啟動目標 URL。

概念與用法

您可以透過在 Web 應用清單檔案中新增 launch_handler 欄位來指定應用的啟動行為。該欄位有一個子欄位 client_mode,其中包含一個字串值,指定應用應如何啟動和導航。例如:

json
{
  "launch_handler": {
    "client_mode": "focus-existing"
  }
}

如果未指定,預設的 client_mode 值為 auto。可用值為:

focus-existing

將選擇最近與 Web 應用視窗中的瀏覽上下文進行互動的上下文來處理啟動。這會將啟動目標 URL 填充到傳遞給 window.launchQueue.setConsumer() 回撥函式的 LaunchParams 物件的 targetURL 屬性中。正如您將在下面看到的,這允許您為您的應用設定自定義的啟動處理功能。

將最近與 Web 應用視窗中的瀏覽上下文進行互動的上下文導航到啟動目標 URL。目標 URL 仍可透過 window.launchQueue.setConsumer() 訪問,以便實現額外的自定義啟動導航處理。

在 Web 應用視窗中建立一個新的瀏覽上下文來載入啟動目標 URL。目標 URL 仍可透過 window.launchQueue.setConsumer() 訪問,以便實現額外的自定義啟動導航處理。

auto

使用者代理決定最適合平臺的行為。例如,在移動裝置上,navigate-existing 可能更合適,因為單例項應用很常見,而在桌面環境中,navigate-new 可能更合適。如果提供了無效值,則使用此預設值。

當使用 focus-existing 時,您可以在 window.launchQueue.setConsumer() 的回撥函式中包含程式碼,以提供對 targetURL 的自定義處理。

js
window.launchQueue.setConsumer((launchParams) => {
  // Do something with launchParams.targetURL
});

注意: LaunchParams 還有一個 LaunchParams.files 屬性,它返回一個只讀的 FileSystemHandle 物件陣列,表示透過 POST 方法隨啟動導航一起傳遞的任何檔案。這允許實現自定義檔案處理。

介面

LaunchParams

在 PWA 中實現自定義啟動導航處理時使用。當呼叫 window.launchQueue.setConsumer() 來設定啟動導航處理功能時,setConsumer() 中的回撥函式將接收一個 LaunchParams 物件例項。

LaunchQueue

當使用 focus-existingnavigate-newnavigate-existinglaunch_handler client_mode 值啟動漸進式 Web 應用 (PWA) 時,LaunchQueue 提供對功能的訪問,該功能允許在 PWA 中實現自定義啟動導航處理。此功能由傳遞給 setConsumer() 回撥函式的 LaunchParams 物件的屬性控制。

其他介面的擴充套件

window.launchQueue

提供對 LaunchQueue 類的訪問,該類允許在漸進式 Web 應用 (PWA) 中實現自定義啟動導航處理,其處理上下文由 launch_handler 清單欄位 client_mode 值表示。

示例

js
if ("launchQueue" in window) {
  window.launchQueue.setConsumer((launchParams) => {
    if (launchParams.targetURL) {
      const params = new URL(launchParams.targetURL).searchParams;

      // Assuming a music player app that gets a track passed to it to be played
      const track = params.get("track");
      if (track) {
        audio.src = track;
        title.textContent = new URL(track).pathname.slice(1);
        audio.play();
      }
    }
  });
}

此程式碼包含在 PWA 中,並在應用載入時、啟動時執行。window.launchQueue.setConsumer() 的回撥函式從 LaunchParams.targetURL 中提取搜尋引數,如果找到 track 引數,則使用它來填充 <audio> 元素的 src 並播放該元素指向的音訊軌道。

有關完整的可執行程式碼,請參閱 Musicr 2.0 演示應用。

規範

規範
Web 應用啟動處理程式 API
# launchqueue-interface

瀏覽器相容性

另見