起動ハンドラ API

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

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

現在のステータス

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

Launch Handler API の使用

ブラウザ サポート

起動ハンドラは 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);
      }
    }
  });
}

デモ

Launch Handler API の動作のデモは、PWA Launch Handler デモで確認できます。アプリケーションのソースコードを調べて、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 にツイートを送信し、どこでどのように使用しているかをお知らせください。

関連情報