Поделиться через


Как запустить приложение по умолчанию для URI (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

Узнайте, как запускать приложение по умолчанию для универсального кода ресурса (URI). Универсальные коды ресурсов (URI) позволяют запустить приложение в операционной системе, чтобы выполнить определенную задачу. Например, чтобы дать пользователю возможность отправлять почту из приложения, можно запустить почтовое приложение по умолчанию с помощью URI "mailto:".

Далее показано, как использовать API Windows.System.Launcher, чтобы запустить обработчик по умолчанию для универсального кода ресурса (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:  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) для запуска URI, созданного на шаге 1, используя приложение по умолчанию для URI HTTP.

// 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, созданного на шаге 1, с предупреждением. Используйте свойство treatAsUntrusted для указания, что операционная система должна вывести на экран предупреждение.

Примечание  

Вызовите preventDefault в обработчике событий, если свойство treatAsUntrusted задано и вы используете элемент a для запуска URI.

 

Диалоговое окно предупреждения с перекрытием на фоне неактивного приложения. В диалоговом окне содержится вопрос, хочет ли пользователь переключиться на другое приложение, и кнопки "Да" и "Нет" в правой нижней части. Кнопка "Нет" выделена.

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 имя этого приложения. Операционная система будет использовать эту информацию, чтобы заменить общий параметр (поиск приложения в Магазине) конкретным параметром (приобретение рекомендованного приложения в Магазине).

Примечание  Чтобы рекомендовать приложение, необходимо настроить рекомендацию приложения в обоих этих параметрах. Настройка одного параметра без другого приведет к ошибке.

 

Диалоговое окно "Открыть с помощью" для запуска URI CONTOSO. Поскольку для формата 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: 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 напрямую связаны с пользовательским интерфейсом вашего приложения. Чтобы запустить URI, пользователь всегда должен выполнить какое-либо действие. Если вы попытаетесь запустить URI, когда приложение не находится на переднем плане, запуск завершится ошибкой и будет выполнен обратный вызов для ошибки.

Вам нужно указать возможность privateNetworkClientServer, чтобы запускать универсальные коды ресурсов (URI) интрасети, например URI file:///, указывающий на расположение в сети.

Этот метод нельзя использовать для запуска URI в локальной зоне. Например, приложения не смогут использовать URI file:/// для доступа к файлам на локальном устройстве. Вместо него для доступа к файлам необходимо использовать Storage APIs. Если вы попытаетесь запустить URI интрасети, не указав правильную возможность, или URI в локальной зоне, запуск завершится ошибкой и будет выполнен обратный вызов для ошибки.

Полный пример

См. пример запуска сопоставления (Windows).

Связанные разделы

Задачи

Обработка активации протокола

Запуск приложения по умолчанию для файла

Руководство

Руководство и контрольный список по типам файлов и универсальным кодам ресурсов (URI)

Ссылки

Windows.System.Launcher.launchUriAsync