Comment recevoir un lien (HTML)

[ Cet article est destiné aux développeurs de Windows 8.x et Windows Phone 8.x qui créent des applications Windows Runtime. Si vous développez une application pour Windows 10, voir la Documentation ]

Les liens sont une forme de données courante que les utilisateurs aiment partager. Parfois, les utilisateurs partagent un lien directement (par exemple, à partir d’un article publié sur un site Web). La prise en charge des liens offre aussi une deuxième solution utile pour les utilisateurs qui souhaitent partager du code HTML ou un contenu susceptible d’être disponible en ligne.

Cette rubrique montre comment recevoir un lien qui est partagé à partir d’une application source.

Ce que vous devez savoir

Technologies

Prérequis

  • Vous devez être familiarisé avec Visual Studio et ses modèles connexes.
  • Vous devez être familiarisé avec JavaScript.

Instructions

Étape 1: prendre en charge le contrat de partage

Avant que votre application puisse recevoir un contenu partagé, vous devez déclarer qu’elle prend en charge le contrat de partage. Ce contrat indique au système que votre application est apte à recevoir des contenus. Si vous utilisez un modèle Microsoft Visual Studio pour créer votre application, voici comment prendre en charge le contrat de partage :

  1. Ouvrez le fichier manifeste (package.manifest) en mode concepteur.
  2. Ouvrez l’onglet Déclarations.
  3. Choisissez Partage cible dans la liste Déclarations disponibles.
  4. Cliquez sur Ajouter pour ajouter la prise en charge du contrat de partage cible dans votre application.

Étape 2: indiquer que votre application prend en charge les liens

Pour prendre en charge les liens, vous devez indiquer que votre application prend en charge le format URI :

  1. Ouvrez le fichier manifeste.
  2. Dans la section Formats de données, cliquez sur Ajouter.
  3. Tapez "texte" (sans les guillemets).

Les étapes précédentes ajoutent la section suivante au manifeste :

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

Remarque  Vous pouvez spécifier un autre point d’entrée lorsque votre application est activée pour le contrat de partage cible. Pour ce faire, modifiez l’entrée de page Démarrage dans la section des paramètres Application de la déclaration Partage cible du manifeste du package. Nous vous recommandons d’utiliser également un fichier JavaScript distinct qui gère l’activation pour cette page. Par exemple, consultez l’Exemple de partage de contenu cible entre applications.

 

Étape 3: ajouter un gestionnaire d’événements pour savoir à quel moment votre application est activée

Quand un utilisateur sélectionne votre application pour partager du contenu, le système active votre application. Étant donné que cela peut se produire de différentes façons, vous devez ajouter un code qui détecte la raison de l’activation de l’application. Pour ce faire, vérifiez la valeur de la propriété 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) {
        ...
    }
};

Si vous utilisez une page de démarrage dédiée pour le contrat de partage cible, vous pouvez omettre de vérifier la propriété kind

Étape 4: obtenir l’objet ShareOperation

L’objet ShareOperation contient toutes les données dont votre application a besoin pour obtenir le contenu qu’un utilisateur souhaite partager.

shareOperation = args.detail.shareOperation;

Étape 5: retourner rapidement du gestionnaire d’événements activé.

Le gestionnaire d’événements activated doit retourner rapidement. Mettez en file d’attente un événement asynchrone provenant du gestionnaire d’événements activated pour que le traitement des données de partage ait lieu après le retour de l’événement activé.

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

Les étapes restantes servent à implémenter la fonction shareReady.

Étape 6: vérifier si l’objet DataPackageView contient une URI

L’objet ShareOperation contient un objet DataPackageView. Cet objet est une version en lecture seule de l’objet DataPackage que l’application source a utilisé pour créer les données. Utilisez cet objet pour voir si le contenu partagé contient un lien.

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

Vérifier que le DataPackage contient le format de données qui vous intéresse est une pratique recommandée, même si votre application ne prend en charge qu’un seul format. Cela facilite la prise en charge d’autres types de formats de données et de formats de fichiers ultérieurement.

Étape 7: traiter le lien

Pour obtenir l’URI, appelez la méthode 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;
    }
});

Étape 8: Appelez reportCompleted.

Lorsque votre application a terminé de partager le contenu, appelez la méthode reportCompleted. Quand vous avez appelé cette méthode, le système masque votre application.

shareOperation.reportCompleted();

Remarques

Certaines applications peuvent fournir un URI (Uniform Resource Identifier) qui ne commence pas par http:// ou https://. Par exemple, une application source peut fournir un protocole d’activation qui amènerait un utilisateur directement au contenu dans l’application elle-même. Si votre application peut déjà prendre en charge n’importe quel URI, vous bénéficiez de cette fonctionnalité par défaut. Si votre application est limitée uniquement à certains types d’URI, envisagez ce qui suit :

  • Si vous prenez en charge le format HTML, utilisez plutôt l’HTML fourni dans le DataPackage.
  • Si vous ne prenez pas en charge le format HTML, mais prenez en charge le texte, utilisez le texte dans le DataPackage.
  • Si aucune des options précédentes ne fonctionne, envisagez d’afficher un message qui indique à l’utilisateur que vous ne prenez pas en charge l’URI en question.

Dans tous les cas, essayez d’incorporer le titre et la description des données à votre expérience. Cela donne à l’utilisateur plus de contexte sur ce qui est partagé.

Consultez notre exemple de code Exemple de partage de contenu cible entre applications pour observer l’intégralité de l’expérience d’une application recevant une image dans un contexte de partage.

Terminer l’exemple

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" });
    }
};

Rubriques associées

Exemple de partage de contenu cible entre applications

Partage et échange de données

Comment recevoir des fichiers

Comment recevoir du contenu HTML

Comment recevoir du texte

Démarrage rapide : réception de contenu partagé

DataPackage

Windows.ApplicationModel.DataTransfer

Windows.ApplicationModel.DataTransfer.Share

Recommandations pour le débogage des applications cibles