起動ハンドラ API

アプリの起動方法を管理します。

Launch Handler API を使用すると、アプリの起動方法(既存ウィンドウと新しいウィンドウのどちらを使用するか、選択したウィンドウを起動 URL に移動するかどうかなど)を制御できます。File Handing API と同様に、起動されたページの window.launchQueueLaunchParams オブジェクトもキューに追加されます。

現在のステータス

ステップ ステータス
1. 説明を作成 完了
2. 仕様の初期ドラフトを作成する 完了
3. フィードバックを収集して設計を繰り返す 完了
4. オリジン トライアル。 完了
5. リリース 完了

Launch Handler API の使用

ブラウザ サポート

Launch Handler は ChromeOS でのみ使用できます。

対応ブラウザ

  • 110
  • 110
  • x
  • x

ソース

インターフェース

Launch Handler API で 2 つの新しいインターフェースを定義します。

LaunchParams : コンシューマーが処理する targetURL を含むオブジェクト。LaunchQueue : 指定されたコンシューマによって処理されるまで、起動キューをキューに入れます。

launch_handler マニフェスト メンバー

アプリの起動動作を宣言的に指定するには、マニフェストに launch_handler マニフェスト メンバーを追加します。client_mode というサブフィールドが 1 つあります。これにより、新規のクライアントと既存のクライアントのどちらを起動するか、このクライアントをナビゲートするかどうかを制御できます。以下の例は、すべての起動を常に新しいクライアントにルーティングする値の例を示しています。

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

指定しない場合、launch_handler はデフォルトで {"client_mode": "auto"} になります。サブフィールドに指定できる値は次のとおりです。

  • client_mode:
    • navigate-new: リリースのターゲット URL を読み込むために、ウェブアプリ ウィンドウで新しいブラウジング コンテキストが作成されます。
    • navigate-existing: ウェブアプリ ウィンドウでブラウジング コンテキストを最後に操作した時間が、起動のターゲット URL に移動されます。
    • focus-existing: ウェブアプリ ウィンドウでブラウジング コンテキストを最後に操作したオプションが選択され、起動を処理します。targetURL が起動 URL に設定された新しい LaunchParams オブジェクトが、ドキュメントの 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() が起動時に渡された URL から 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. ChromeOS デバイスに Musicr 2.0 アプリをインストールします。
  2. https://launch-handler.glitch.me?track=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 など、音声ファイルを指す任意の URL の https://example.com/music.mp3 をカスタマイズできます)。
  3. チャットアプリのリンクをクリックして、Musicr 2.0 が開き、トラックが再生されることを確認します。
  4. チャットアプリでリンクをもう一度クリックすると、Musicr 2.0 の 2 番目のインスタンスが表示されないことがわかります。

フィードバック

Chromium チームでは、Launch Handler API の使用経験についてお聞かせください。

API 設計について教えてください

API について、想定どおりに機能していないものはありますか?あるいは、アイデアを実装するために 不足しているメソッドやプロパティがないでしょうか。セキュリティモデルについて ご不明な点がある場合や対応する GitHub リポジトリで仕様の問題を提出するか、既存の問題に意見を追加します。

実装に関する問題を報告する

Chromium の実装にバグは見つかりましたか?または、実装が仕様と異なっていますか? new.crbug.com でバグを報告します。できるだけ詳しい情報と簡単な再現手順を記載し、[Components] ボックスに「Blink>AppManifest」と入力します。Glitch は、すばやく簡単に再現を共有するのに最適です。

API のサポートを表示する

Launch Handler API を使用する予定はありますか?公開サポートは、Chromium チームが機能の優先度を判断し、そのサポートの重要性を他のブラウザ ベンダーに伝えるのに役立ちます。

ハッシュタグ #LaunchHandler を使用して @ChromiumDev にツイートし、どこでどのように使用しているかをお知らせください。

関連情報