起動ハンドラ API

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

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

現在のステータス

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

Launch Handler API を使用する

ブラウザ サポート

対応ブラウザ

  • Chrome: 110.
  • エッジ: 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 にツイートを送信し、どこでどのように使用しているかをお知らせください。

関連情報