控制應用程式的啟動方式。
Launch Handler API 可讓您控制應用程式的啟動方式,例如應用程式要使用現有視窗還是新視窗,以及所選視窗是否導向至啟動網址。與 File Handing API 一樣,這也會在啟動頁面的 window.launchQueue
中將 LaunchParams
物件排入佇列。
目前狀態
步驟 | 狀態 |
---|---|
1. 建立說明 | 完成 |
2. 建立規格的初始草稿 | 完成 |
3. 收集意見回饋並反覆改進設計 | 已完成 |
4. 來源試用。 | 已完成 |
5. 發布 | 完成 |
使用 Launch Handler API
瀏覽器支援
啟動處理常式僅適用於 ChromeOS。
介面
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
:選擇最近與網頁應用程式視窗中瀏覽環境互動的情形,以處理啟動作業。新的LaunchParams
物件 (其targetURL
設為啟動網址) 會排入文件的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()
函式會從啟動時傳遞的網址擷取 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 API。
- 在 ChromeOS 裝置上安裝 Musicr 2.0 應用程式。
- 透過
https://launch-handler.glitch.me?track=https://example.com/music.mp3
表單的即時通訊應用程式,傳送連結給自己。(您可以針對指向音訊檔案的任何網址自訂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
)。 - 按一下即時通訊應用程式中的連結,然後留意「Musicr 2.0」如何開啟並播放曲目。
- 再次點選即時通訊應用程式中的連結,您會發現系統不會再顯示 Musicr 2.0 的執行個體。
意見回饋:
Chromium 團隊想瞭解你的 Launch Handler API 使用體驗。
請與我們分享 API 設計
您覺得這個 API 有任何不如預期的運作方式嗎?還是你還需要實現想法或屬性呢?對安全性模型有任何疑問或意見嗎?在對應的 GitHub 存放區上提出規格問題,或是將您的想法新增至現有問題。
回報導入問題
您發現 Chromium 實作錯誤嗎?還是採用與規格不同?
前往 new.crbug.com 回報錯誤。此外,請務必盡量提供詳細資料、能重現的簡單操作說明,並在「Components」(元件) 方塊中輸入 Blink>AppManifest
。Glitch 有便捷的報復工具,
顯示對 API 的支援
您是否打算使用 Launch Handler API?您的公開支援服務有助於 Chromium 團隊優先開發特定功能,並向其他瀏覽器廠商說明支援這些功能的重要性。
使用主題標記 #LaunchHandler
將推文傳送到 @ChromiumDev,並告訴我們您在哪裡使用它。