URI に応じて既定のアプリを起動する方法 (HTML)

URI (Uniform Resource Identifier) に応じて既定のアプリを起動する方法について説明します。URI を使うと、オペレーティング システム上で別のアプリを起動して特定の作業を実行できます。たとえば、アプリ内でユーザーが連絡先にメールを送信できるようにするには、mailto: URI を使ってユーザーの既定のメール アプリを起動します。

以下の手順では、Windows.System.Launcher API を使って、URI の既定のハンドラーを起動する方法を示します。

手順

ステップ 1: URI を作成する

起動する URI の Windows.Foundation.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:  [LauncherOptions.DesiredRemainingView] は Windows 8.1 と Windows Server 2012 R2 までサポートされません。

Windows Phone:  [LauncherOptions.DesiredRemainingView] は、Windows Phone ではサポートされていません。

 

次の例では、Windows.System.Launcher.launchUriAsync メソッドを使って URI を起動します。これはオーバーロード メソッドです。

Default launch

Windows.System.Launcher.launchUriAsync(Uri) メソッドを呼び出して、手順 1. で作成した URI を http 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) メソッドを呼び出して、手順 1. で作成した 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 を処理するアプリがインストールされていないこともあります。既定では、オペレーティング システムによってストア上の適切なアプリを検索するリンクが表示されて、これらのケースは対処されます。このシナリオで入手するアプリに関する特定の推奨事項を示す場合は、起動中のファイルと共に推奨事項を渡すことができます。そのためには、LauncherOptions.preferredApplicationPackageFamilyName を推奨するストア内のアプリのパッケージ ファミリ名に設定して、Windows.System.Launcher.LaunchUriAsync(Uri, LauncherOptions) メソッドを呼び出します。 その後、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 の起動後も画面上に留まることを要求できます。既定では、利用可能なスペース全体がソース アプリと URI を処理するターゲット アプリとで均等に共有されます。ソース アプリでは、DesiredRemainingView プロパティを使って、利用可能なスペースをソース アプリのウィンドウがどの程度占めるかをオペレーティング システムに指示できます。この DesiredRemainingView では、URI の起動後にソース アプリが画面上に留まる必要がなく、ターゲット アプリに完全に置き換わっても良いことも示せます。このプロパティは呼び出し元アプリの優先ウィンドウのサイズだけを指定します。画面に同時に表示されている可能性のある他のアプリの動作は指定しません。

  ソース アプリの最終的なウィンドウ サイズは、複数の異なる要素が考慮されて決定されます。たとえば、ソース アプリの設定、画面上のアプリの数、画面の向きなどです。DesiredRemainingView を設定しても、ソース アプリの特定のウィンドウ動作が保証されるわけではありません。

 

Windows 8.1: LauncherOptions.DesiredRemainingView は Windows 8.1 と Windows Server 2012 R2 までサポートされません。

Windows Phone: LauncherOptions.DesiredRemainingView は、Windows Phone ではサポートされていません。

// 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 を起動しようとしたときにアプリがフォアグラウンドにない場合、起動は失敗し、エラー コールバックが呼び出されます。

イントラネット URI (たとえば、ネットワーク位置を指す file:/// URI) を起動するには、privateNetworkClientServer 機能を指定する必要があります。

この方法でローカル ゾーンの URI を起動することはできません。たとえば、アプリは file:/// URI を使ってローカル コンピューター上のファイルにアクセスすることはできません。代わりに、Storage APIs を使ってファイルにアクセスする必要があります。適切な機能またはローカル ゾーン URL なしでイントラネット URI を起動しようとした場合、起動は失敗し、エラー コールバックが呼び出されます。

完全な例

関連付けによる起動のサンプル (Windows) に関するページをご覧ください。

関連トピック

タスク

プロトコルのアクティブ化を処理する方法

ファイルに応じて既定のアプリを起動する方法

ガイドライン

ファイルの種類と URI のガイドラインとチェック リスト

辞書/リファレンス

Windows.System.Launcher.launchUriAsync