アプリの起動方法を管理します。
Launch Handler API を使用すると、アプリの起動方法(既存ウィンドウと新しいウィンドウのどちらを使用するか、選択したウィンドウを起動 URL に移動するかどうかなど)を制御できます。File Handing API と同様に、起動されたページの window.launchQueue
で LaunchParams
オブジェクトもキューに追加されます。
現在のステータス
ステップ | ステータス |
---|---|
1. 説明を作成 | 完了 |
2. 仕様の初期ドラフトを作成する | 完了 |
3. フィードバックを収集して設計を繰り返す | 完了 |
4. オリジン トライアル。 | 完了 |
5. リリース | 完了 |
Launch Handler API の使用
ブラウザ サポート
Launch Handler は ChromeOS でのみ使用できます。
インターフェース
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 の使用方法を確認してください。
- ChromeOS デバイスに Musicr 2.0 アプリをインストールします。
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
をカスタマイズできます)。- チャットアプリのリンクをクリックして、Musicr 2.0 が開き、トラックが再生されることを確認します。
- チャットアプリでリンクをもう一度クリックすると、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 にツイートし、どこでどのように使用しているかをお知らせください。