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


Как получить ссылку (HTML)

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

Ссылки — это распространенный формат для общего доступа к данным. Иногда пользователь предоставляет доступ к ссылке напрямую (например, в статье на веб-сайте). Поддержка ссылок также удобна как дополнительная возможность, когда пользователи совместно используют HTML или содержимое, доступное в сети.

В этом разделе показано, как получить ссылку, доступ к которой предоставлен в исходном приложении.

Что необходимо знать

Технологии

Необходимые условия

  • Вы должны уметь работать с программой Visual Studio и связанными с ней шаблонами.
  • Вы должны знать JavaScript.

Инструкции

Этап 1: Поддержка контракта отправки данных

Чтобы ваше приложение могло получать общее содержимое, вам нужно объявить, что оно поддерживает контракт отправки данных. Этот контракт, по сути, позволяет системе узнать о доступности вашего приложения для получения содержимого. Если для создания приложения вы используете шаблон Microsoft Visual Studio, обеспечить поддержку контракта отправки данных можно следующим образом:

  1. Откройте файл манифеста (package.manifest) в представлении конструирования.
  2. Откройте вкладку Объявления.
  3. Выберите Конечное приложение в списке Доступные объявления.
  4. Щелкните Добавить, чтобы добавить поддержку контракта получателя данных в ваше приложение.

Этап 2: Определение программы как поддерживающей ссылки

Чтобы поддерживать ссылки, необходимо указать, что ваше приложение поддерживает формат универсального кода ресурса (URI):

  1. Откройте файл манифеста.
  2. В разделе Форматы данных щелкните Добавить.
  3. Введите "text" (без кавычек).

Ранее описанные действия добавляют следующий раздел в манифест:

<Extensions>
  <Extension Category="windows.shareTarget">
    <ShareTarget>
      <DataFormat>uri</DataFormat>
    </ShareTarget>
  </Extension>
</Extensions>

Примечание  Вы можете указать другую точку входа, когда ваше приложение активируется для контракта получателя данных. Для этого измените запись на Начальной странице в разделе параметров Приложения в разделе объявления Получатель данных в манифесте пакета. Мы настоятельно рекомендуем использовать отдельный файл JavaScript, который управляет активацией этой страницы. Например, просмотрите образец Общий доступ к содержимому приложения-получателя данных.

 

Этап 3: Добавить обработчик событий, определяющий активацию приложения.

Когда пользователь выбирает ваше приложение для совместного доступа к содержимому, система активирует приложение. Так как это может осуществляться разными способами, вам нужно добавить код, определяющий причину активации. Для этого проверьте значение свойства kind.

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        // The application has been launched. Initialize as appropriate.
    } else if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.shareTarget) {
        ...
    }
};

Если вы используете отдельную начальную страницу для контракта получателя данных, вы можете пропустить проверку свойства kind.

Этап 4: Получить объект "ShareOperation"

Объект ShareOperation содержит все данные, необходимые вашему приложению, чтобы получить общее содержимое.

shareOperation = args.detail.shareOperation;

Этап 5: Быстро завершите обработчик активированного события.

Обработчик событий activated должен быстро возвращаться. Поставьте в очередь асинхронное событие из обработчика событий activated, чтобы обработка общих данных происходила после возврата активированного события.

WinJS.Application.addEventListener("shareready", shareReady, false);
WinJS.Application.queueEvent({ type: "shareready" });

Остальные шаги выполняются для реализации функции shareReady.

Этап 6: Проверьте объект DataPackageView на наличие универсального кода ресурса (URI).

Объект ShareOperation содержит объект DataPackageView. Этот объект является доступной только для чтения версией объекта DataPackage, который был использован исходным приложением для создания данных. С помощью этого объекта проверьте, является ли общее содержимое ссылкой.

if (shareOperation.data.contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.uri)) {
    // Code to process URI goes here.
}

Рекомендуем проверить, содержит ли DataPackage формат данных, в котором вы заинтересованы, даже если ваше приложение поддерживает только один формат. Это упростит поддержку других типов данных и форматов файлов, которые могут понадобиться в дальнейшем.

Этап 7: Обработайте ссылку.

Чтобы получить универсальный код ресурса (URI), вызовите метод DataPackageView.getUriAsync.

shareOperation.data.getUriAsync().then(function (uri) {
    if (uri != null) {
        // In this sample, we only display the URI. To output the link using this example, 
        // you need a div tag with an id of "output" in your HTML file.
        // In your app, replace this with whatever is appropriate for your scenario.
        document.getElementById("output").innerText = uri.absoluteUri;
    }
});

Этап 8: Вызовите метод reportCompleted.

После того, как ваше приложение успешно завершит предоставление общего доступа к содержимому, вызовите reportCompleted. После того, как вы вызовете этот метод, система закроет ваше приложение.

shareOperation.reportCompleted();

Замечания

Некоторые приложения могут предоставлять универсальный код ресурса (URI), который не начинается с http:// или https://. Например, исходное приложение может предоставить протокол активации, который будет непосредственно перенаправлять пользователя к содержимому в самом приложении. Если ваше приложение уже поддерживает любой универсальный код ресурса (URI), вы получаете эту возможность по умолчанию. Если же ваше приложение ограничено только определенными видами универсальных кодов ресурса (URI), вам необходимо принять во внимание следующее:

  • Если вы поддерживаете HTML, используйте в качестве альтернативы HTML, предоставленный в DataPackage.
  • Если вы поддерживаете не HTML, а текст, используйте текст в DataPackage.
  • Если ни один из предложенных вариантов не работает, попробуйте отобразить сообщение для пользователя о том, что вы не поддерживаете конкретный универсальный код ресурса (URI).

Во всех случаях попробуйте включить название и описание данных в ваш способ взаимодействия. Это дает пользователю больше контекста о данных, к которым предоставляется общий доступ.

Посмотрите образец кода Общий доступ к содержимому приложения-получателя данных, чтобы ознакомиться с полным сценарием работы приложения, получающего изображение по механизму общего доступа.

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

var shareOperation = null;

function shareReady(args) {
    if (shareOperation.data.contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.uri)) {
        shareOperation.data.getUriAsync().done(function (uri) {
            // In this sample, we only display the URI. To output the link using this example, 
            // you need a div tag with an id of "output" in your HTML file.
            // In your app, replace this with whatever is appropriate for your scenario.
            document.getElementById("output").innerText = "Uri: " + uri.absoluteUri;
        });
    }
}

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        // The app was launced. Initialize as appropriate.
        args.setPromise(WinJS.UI.processAll());
    } else if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.shareTarget) {
        // This app was been activated for the Share contract
        args.setPromise(WinJS.UI.processAll());

        // We receive the ShareOperation object as part of the eventArgs
        shareOperation = args.detail.shareOperation;


        // We queue an asychronous event so that working with the ShareOperation 
        // object does not block or delay the return of the activation handler.
        WinJS.Application.addEventListener("shareready", shareReady, false);
        WinJS.Application.queueEvent({ type: "shareready" });
    }
};

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

Пример конечного приложения при общем доступе к содержимому

Общий доступ к данным и обмен данными

Получение файлов

Получение HTML

Получение текста

Краткое руководство. Получение общего содержимого

DataPackage

Windows.ApplicationModel.DataTransfer

Windows.ApplicationModel.DataTransfer.Share

Руководство по отладке целевых приложений