起動ハンドラ API

アプリの起動方法を制御する。

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

現在のステータス

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

Launch Handler API を使用する

ブラウザ サポート

対応ブラウザ

  • Chrome: 110.
  • Edge: 110。
  • Firefox: サポートされていません。
  • Safari: サポートされていません。

ソース

インターフェース

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. Musicr 2.0 アプリをインストールします。
  2. https://launch-handler.glitch.me?track=https://example.com/music.mp3 という形式のチャット アプリケーションでリンクを自分に送信します。(https://example.com/music.mp3 は、オーディオ ファイルを指す URL に対してカスタマイズできます(例: 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 の 2 つ目のインスタンスは表示されません。

フィードバック

Chromium チームは、Launch Handler API の使用感について、皆様のご意見をお聞かせいただきたいと考えています。

API 設計について

API が想定どおりに動作しない点はありますか?または、アイデアを実装するために必要なメソッドやプロパティが不足している場合はどうすればよいですか?セキュリティ モデルに関するご質問やご意見がございましたら、対応する GitHub リポジトリで仕様に関する問題を報告するか、既存の問題にコメントを追加します。

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

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

API のサポートを表示する

Launch Handler API を使用する予定はありますか?公開サポートは、Chromium チームが機能を優先付けするうえで役立ち、他のブラウザ ベンダーに、その機能のサポートがどれほど重要であるかを示します。

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

関連情報