如何啟動 URI 的預設應用程式 (HTML)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
了解如何啟動統一資源識別項 (URI) 的預設應用程式。URI 能讓您啟動作業系統上的另一個應用程式來執行特定工作。例如,如果您想要允許使用者傳送電子郵件給應用程式中的連絡人,您可以使用 mailto: URI 來啟動使用者的預設電子郵件應用程式。
這些步驟示範如何使用 Windows.System.Launcher API 來啟動 URI 的預設處理常式。
指示
步驟 1: 建立 URI
建立 Windows.Foundation.Uri 物件以啟動 URI。這個 URI 使用 HTTP 配置名稱。
// The URI to launch
var uriToLaunch = "https://www.bing.com";
// Create a Uri object from a URI string
var uri = new Windows.Foundation.Uri(uriToLaunch);
步驟 2: 啟動 URI
作業系統提供數個不同的選項來啟動 URI 的預設處理常式。這些選項在這個圖表和接下來的小節中有更詳細的說明。
選項 | 方法 | 說明 |
---|---|---|
預設啟動 | LaunchUriAsync(Uri) | 使用預設處理常式啟動指定的 URI。 |
透過警告對話方塊啟動 | LaunchUriAsync(Uri, LauncherOptions) | 作業系統將在啟動指定的 URI 之前先顯示警告對話方塊。 |
使用建議的應用程式備用選項啟動 | LaunchUriAsync(Uri, LauncherOptions) | 使用預設處理常式啟動指定的 URI。如果系統上沒有安裝處理常式,則建議使用者使用市集中的應用程式。 |
以所需的剩餘檢視啟動 | LaunchUriAsync(Uri, LauncherOptions) (僅限 Windows) | 使用預設處理常式啟動指定的 URI。指定啟動後停留在畫面上的喜好設定,並要求特定視窗大小。
Windows 8.1: Windows 8.1 和 Windows Server 2012 R2 之前的版本不支援 LauncherOptions.DesiredRemainingView。 Windows Phone: Windows Phone 不支援 LauncherOptions.DesiredRemainingView。 |
這些範例使用 Windows.System.Launcher.launchUriAsync 方法來啟動 URI。這是多載方法。
Default launch
使用 HTTP URI 的預設應用程式,呼叫 Windows.System.Launcher.launchUriAsync(Uri) 方法來啟動步驟 1 中建立的 URI。
// Launch the URI
Windows.System.Launcher.launchUriAsync(uri).then(
function (success) {
if (success) {
// URI launched
} else {
// URI launch failed
}
});
Launch with a warning dialog
呼叫 Windows.System.Launcher.launchUriAsync(Uri, LauncherOptions) 方法,啟動第一個步驟中建立的 URI 並顯示警告。使用 treatAsUntrusted 屬性指示作業系統顯示警告。
注意
如果已設定 treatAsUntrusted 屬性且您要使用 a 元素來啟動 URI,請在您的事件處理常式中呼叫 preventDefault。
function linkClickHandler(eventInfo) {
var link = eventInfo.target;
if (eventInfo.srcElement && (
(eventInfo.type === "click") ||
(eventInfo.type === "keydown" && (
eventInfo.keyCode === WinJS.Utilities.Key.enter ||
eventInfo.keyCode === WinJS.Utilities.Key.space)))) {
eventInfo.preventDefault();
if (link.href.indexOf("ms-appx") > -1) {
WinJS.Navigation.navigate(link.href);
}
else if (link.href.indexOf("http") > -1) {
// Create a Uri object from a URI string
var uri = new Windows.Foundation.Uri(link.href);
var options = new Windows.System.LauncherOptions();
// Launch the URI with a warning prompt
options.treatAsUntrusted = true;
// Launch the URI
Windows.System.Launcher.launchUriAsync(uri, options).then(
function (success) {
if (success) {
// URI launched
} else {
// URI launch failed
}
});
}
}
}
Launch with a recommended app fallback
在某些情況下,使用者可能尚未安裝可處理您要啟動之 URI 的應用程式。依照預設,作業系統處理這些情況的方法是提供連結,讓使用者在市集上搜尋適當的應用程式。如果您想提供使用者在此情況下應取得何種應用程式的特定建議,可以在啟動檔案時一併傳送該建議。若要這樣做,請呼叫 Windows.System.Launcher.LaunchUriAsync(Uri, LauncherOptions) 方法,並將 LauncherOptions.preferredApplicationPackageFamilyName 設為您想建議使用者使用的市集應用程式套件系列名稱。 然後將 LauncherOptions.preferredApplicationDisplayName 設為該應用程式的名稱。作業系統會使用此資訊,並搭配從市集取得建議應用程式的特定選項,以取代在市集中搜尋應用程式的一般選項。
注意 您必須設定這兩個選項才能建議應用程式。只設定其中一個將出現錯誤。
// Set the recommended app.
var options = new Windows.System.LauncherOptions();
options.preferredApplicationPackageFamilyName = "Contoso.URIApp_8wknc82po1e";
options.preferredApplicationDisplayName = "Contoso URI App";
// Launch the URI and pass in the recommended app
// in case the user has no apps installed to handle the URI
Windows.System.Launcher.launchUriAsync(uri, options).then(
function (success) {
if (success) {
// Uri launched
} else {
// Uri launch failed
}
});
以所需的剩餘檢視啟動 (僅限 Windows)
呼叫 LaunchUriAsync 的來源應用程式可要求在 URI 啟動後停留在畫面上。根據預設,Windows 會嘗試將所有可用空間平均分享給來源應用程式與用來處理 URI 的目標應用程式。來源應用程式可以使用 DesiredRemainingView 屬性,告知作業系統要讓應用程式視窗佔用較多或較少可用空間。您也可以使用 DesiredRemainingView,指示來源應用程式在 URI 啟動後不需要停留在畫面上,且可由目標應用程式完全取代。這個屬性只會指定發出呼叫的應用程式的慣用視窗大小。它不會指定其他可能也同時在螢幕上之應用程式的行為。
注意 Windows 在判斷來源應用程式的最終視窗大小時,會考量多種不同因素,例如來源應用程式的喜好設定、螢幕上的應用程式數目、螢幕方向等。設定 DesiredRemainingView 並無法保證來源應用程式的特定視窗行為。
Windows 8.1: Windows 8.1 和 Windows Server 2012 R2 之前的版本不支援 LauncherOptions.DesiredRemainingView。
Windows Phone: Windows Phone 不支援 LauncherOptions.DesiredRemainingView。
// Launch the URI with a desired remaining view
var options = new Windows.System.LauncherOptions();
options.desiredRemainingView = Windows.UI.ViewManagement.ViewSizePreference.useLess;
Windows.System.Launcher.launchUriAsync(uri, options).then(
function (success) {
if (success) {
// URI launched
} else {
// URI launch failed
}
});
備註
您的應用程式不能選取已啟動的應用程式。使用者決定要啟動哪個應用程式。使用者可以選取 Windows 市集應用程式或傳統型應用程式。
啟動 URI 時,您的應用程式必須是前景應用程式,也就是說,使用者必須看得到您的應用程式。這項需求可讓使用者握有控制權。為了滿足這項需求,請務必將所有 URI 啟動直接繫結到您的應用程式 UI。 使用者一律必須採取某些動作,才能起始 URI 啟動。 如果您嘗試啟動 URI,但您的應用程式不在前景,則啟動將會失敗,並會叫用您的錯誤回呼。
您必須指定 privateNetworkClientServer 功能才能啟動內部網路 URI,例如,指向某個網路位置的 file:/// URI。
您無法使用這個方法啟動本機區域中的 URI。例如,應用程式無法使用 file:/// URI 存取本機裝置上的檔案。您必須改用 Storage APIs 來存取檔案。如果您嘗試啟動內部網路 URI,但沒有正確的功能或本機區域 URI,則啟動將會失敗,並會叫用您的錯誤回呼。
完整範例
請參閱關聯啟動範例 (Windows)。
相關主題
工作
指導方針
參考