如何啟動 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 設為該應用程式的名稱。作業系統會使用此資訊,並搭配從市集取得建議應用程式的特定選項,以取代在市集中搜尋應用程式的一般選項。

注意  您必須設定這兩個選項才能建議應用程式。只設定其中一個將出現錯誤。

 

啟動 .contoso URI 的 [開啟檔案] 對話方塊。因為 .contoso 未在電腦上安裝處理常式,所以對話方塊上出現一個選項,這個選項會包含市集圖示和文字以指示使用者市集中正確的處理常式。對話方塊中也包含了 [更多選項] 連結。

// 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)

相關主題

工作

如何處理通訊協定啟用

如何啟動檔案的預設應用程式

指導方針

檔案類型與 URI 的指導方針和檢查清單

參考

Windows.System.Launcher.launchUriAsync