控管應用程式的啟動方式。
Launch Handler API 可讓您控管應用程式的啟動方式,例如是否使用現有或新的視窗,以及所選視窗是否會導向啟動網址。與 File Handling API 相同,這也會在啟動頁面的 window.launchQueue
中將 LaunchParams
物件加入佇列。
目前狀態
步驟 | 狀態 |
---|---|
1. 建立說明 | 完成 |
2. 草擬規格初稿 | 完成 |
3. 收集意見回饋並反覆修正設計 | 完成 |
4. 來源試用。 | 完成 |
5. 推出 | 完成 |
使用 Launch Handler API
瀏覽器支援
介面
Launch Handler API 定義了兩個新介面。
LaunchParams
:包含消費者要處理的 targetURL
物件。LaunchQueue
:將佇列啟動作業排入佇列,直到指定消費者處理為止。
launch_handler
資訊清單成員
如要以宣告方式指定應用程式的啟動行為,請在資訊清單中加入 launch_handler
資訊清單成員。其中包含名為 client_mode
的子欄位。您可以控管是否要啟動新用戶端或現有用戶端,以及是否要導覽這個用戶端。以下範例顯示含有範例值的檔案,一律會將所有啟動作業導向新的用戶端。
{ "launch_handler": { "client_mode": "navigate-new" } }
如未指定,launch_handler
預設為 {"client_mode": "auto"}
。子欄位的允許值如下:
client_mode
:navigate-new
:系統會在網頁應用程式視窗中建立新的瀏覽環境,載入啟動目標網址。navigate-existing
:網頁應用程式視窗中最近互動的瀏覽環境會導向啟動目標網址。focus-existing
:系統會選擇網頁應用程式視窗中最近互動的瀏覽環境來處理啟動作業。系統會在文件的window.launchQueue
中,將targetURL
設為啟動網址的新LaunchParams
物件加入佇列。auto
:使用者代理程式會根據平台需求,決定最合適的行為。舉例來說,行動裝置只支援單一用戶端,因此會使用existing-client
,而桌上型裝置支援多個視窗,因此會使用navigate-new
,避免資料遺失。
client_mode
屬性也會接受值清單 (陣列),系統會使用第一個有效值。這是為了讓新值能加入規格,同時不破壞與現有實作的回溯相容性。
舉例來說,如果新增了假設值 "focus-matching-url"
,網站會指定 "client_mode": ["focus-matching-url", "navigate-existing"]
,繼續控管不支援 "focus-matching-url"
的舊版瀏覽器行為。
使用 window.launchQueue
在下列程式碼中,函式 extractSongID()
會從啟動時傳遞的網址擷取 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 Demo。請務必查看應用程式的原始碼,瞭解應用程式如何使用 Launch Handler API。
- 安裝 Musicr 2.0 應用程式。
- 在即時通訊應用程式中傳送表單連結給自己
https://mdn.github.io/dom-examples/launch-handler/?track=https://example.com/music.mp3
。(您可以針對指向音訊檔案的任何網址自訂https://example.com/music.mp3
,例如https://mdn.github.io/dom-examples/launch-handler/?track=https://huggingface.co/spaces/VIDraft/PHI4-Multimodal/resolve/main/examples/harvard.wav
)。 - 按一下即時通訊應用程式中的連結,你會發現 Musicr 2.0 會開啟並播放曲目。
- 再次點選即時通訊應用程式中的連結,你會發現系統不會開啟第二個「Musicr 2.0」執行個體。
意見回饋
Chromium 團隊很想瞭解您使用 Launch Handler API 的體驗。
介紹 API 設計
API 是否有任何不符合預期的運作方式?或者,是否有缺少的屬性或方法需要實作,才能實現您的想法?對安全模型有任何問題或意見嗎?在對應的 GitHub 存放區中提出規格問題,或在現有問題中新增想法。
回報導入問題
您是否發現 Chromium 實作有錯誤?還是實作方式與規格不同? 前往 new.crbug.com 提出錯誤回報。請務必盡可能提供詳細資料、重現步驟,並在「Components」(元件) 方塊中輸入 Blink>AppManifest
。
支援 API
您是否打算使用 Launch Handler API?您的公開支持有助於 Chromium 團隊優先處理功能,並向其他瀏覽器供應商展示支援這些功能的重要性。
使用主題標記 #LaunchHandler
發送推文給 @ChromiumDev,告訴我們您在何處使用這項功能,以及使用方式。