Démarrage rapide : épinglage d’une vignette secondaire (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 ]

Remarque  Vous n’utilisez pas JavaScript ? Voir Démarrage rapide : épinglage d’une vignette secondaire (XAML).

 

Cette rubrique vous guide tout au long de la procédure de création d’une vignette secondaire pour une application et son épinglage à l’écran d’accueil.

Prérequis

Conditions préalables à la compréhension de cette rubrique :

Important  Pour voir le code fourni dans cette rubrique utilisé dans un exemple complet, voir Exemple de vignettes secondaires. L’exemple est fourni dans les versions JavaScript, C#, C++ et Visual Basic.

 

Instructions

1. Ajouter une barre de l’application avec un bouton Épingler/Détacher

Sur Windows, vous présentez normalement une opportunité d’épinglage à l’utilisateur par le biais d’un bouton Épingler à l’écran d’accueil dans votre barre de l’application. Pour plus d’informations sur la création d’une barre de l’application, voir Démarrage rapide : ajout d’une barre de l’application avec des commandes.

Remarque  Dans les applications du Windows Phone Store, l’épinglage s’effectue généralement par l’intermédiaire d’un menu contextuel, et non via un bouton sur une barre de l’application.

L’exemple suivant déclare une barre de l’application avec un bouton. Le code suivant est ajouté à la page .html de votre projet auquel le reste du code présenté dans cette rubrique s’applique.


<div id="pinUnpinFromAppbar" data-win-control="WinJS.UI.AppBar" data-win-options="">
    <button 
        data-win-control="WinJS.UI.AppBarCommand" 
        data-win-options="{id:'commandButton',section:'global'}">
    </button>
</div>

2. Fournir un ID unique pour votre vignette secondaire


var appbarTileId = "MySecondaryTile";

3. Créer une fonction pour définir le bouton en tant que bouton d’épinglage ou de détachement

L’action de votre bouton d’épinglage bascule entre l’épinglage et le détachement de la vignette secondaire. Dans cet exemple, nous créons une fonction permettant de définir le bouton de façon appropriée, à l’aide d’icônes fournies par le système pour que l’apparence soit homogène avec les autres applications. Cette fonction est appelée dans le cadre du code d’initialisation de votre application, à chaque ouverture de la barre de l’application et immédiatement après une opération Épingler/Détacher réussie.

La ligne finale de cette fonction définit la propriété WinJS.UI.sticky de la barre de l’application sur false, ce qui permet de masquer la barre de l’application.


function setAppbarButton() {
    var commandButton = appBar.getCommandById("commandButton").winControl;

    if (Windows.UI.StartScreen.SecondaryTile.exists(appbarTileId)) {
        commandButton.label = "Unpin from Start";
        commandButton.icon = "unpin";
    } else {
        commandButton.label = "Pin to Start";
        commandButton.icon = "pin";
    }

    document.getElementById("pinUnpinFromAppbar").winControl.sticky = false;
}

4. Afficher le bouton approprié et affecter un gestionnaire de clic du bouton

Dans cet exemple, dans le cadre de l’initialisation de l’application, nous utilisons la fonction setAppbarButton de l’étape précédente pour vérifier si la vignette secondaire est déjà épinglée et définir le texte du bouton en conséquence.

Nous affectons ensuite le gestionnaire appbarButtonClicked à l’événement click du bouton d’épinglage. Nous vous montrerons comment implémenter le gestionnaire d’événements dans la prochaine étape.

Appelez le code indiqué dans cette étape, avec toute autre initialisation que vous devez effectuer, dans le cadre de l’initialisation de votre application chaque fois que cette application est lancée.


document.getElementById("pinUnpinFromAppbar").disabled = false;
setAppbarButton();

id("commandButton").addEventListener("click", appbarButtonClicked, false);

5. Créer et épingler la vignette secondaire dans le gestionnaire d’événements du bouton

Cet exemple implémente une fonction unique qui peut être appelée par le gestionnaire d’événements de clic du bouton d’épinglage. Cette fonction collecte plusieurs étapes qui conduisent à la demande d’épinglage :

  • Attribuer les valeurs de propriétés requises pour la création de la vignette secondaire
  • Créer l’objet de la vignette secondaire
  • Spécifier d’autres propriétés de la vignette secondaire
  • Obtenir les coordonnées à l’écran permettant d’afficher le menu volant de confirmation (Windows uniquement)

Certaines propriétés de la vignette secondaire doivent être définies avant que la vignette puisse être épinglée. Si vous tentez d’épingler une vignette secondaire sans avoir défini au moins une de ces propriétés, la tentative échoue. Voici les propriétés requises :

  • ID unique de la vignette
  • Nom court (Windows 8.0 uniquement)
  • Nom d’affichage
  • Chaîne passée en argument à l’application parente quand la vignette secondaire est activée
  • Image du logo
  • Options de la vignette (Windows 8.0 uniquement)

Comme exemple de chaîne d’arguments, cet exemple transmet la date et l’heure auxquelles la vignette secondaire a été épinglée à l’écran d’accueil.

Remarque  Sur Windows Phone 8.1, le nom d’affichage n’apparaît jamais sur une vignette secondaire moyenne (150x150). De pus, toutes les vignettes de téléphone sont initialement épinglées en tant que vignettes moyennes, ce qui fait que le paramètre newTileDesiredSize est ignoré sur le téléphone.

Remarque  Si vous fournissez le même ID que celui d’une autre vignette secondaire, cette dernière est alors remplacée.

 


var currentTime = new Date();
var appbarTileId = "SecondaryTile.AppBar";
var newTileDisplayName = "Secondary tile pinned through app bar";                       
var TileActivationArguments = appbarTileId + " was pinned at " + currentTime;                        
var square150x150Logo = new Windows.Foundation.Uri("ms-appx:///Images/square150x150Tile-sdk.png");
var newTileDesiredSize = Windows.UI.StartScreen.TileSize.square150x150;

Ensuite, nous créons l’objet de la vignette secondaire. Cette version du constructeur crée une moyenne vignette. Notez que si votre vignette secondaire reçoit des notifications, il est conseillé de déclarer toutes les tailles de vignettes. Vous devez, pour cela, fournir des images de logo par l’intermédiaire de la classe SecondaryTileVisualElements.


var tile = new Windows.UI.StartScreen.SecondaryTile(appbarTileId,
                                                    newTileDisplayName,
                                                    TileActivationArguments,
                                                    square150x150Logo,
                                                    newTileDesiredSize);

À présent que vous possédez un objet de vignette secondaire, vous pouvez spécifier les propriétés de la vignette secondaire qui ne sont pas définies par le biais du constructeur. Cet exemple spécifie la couleur du texte de premier plan et le petit logo. Il spécifie également que le nom d’affichage apparaît sur la vignette.

Remarque  Sur Windows Phone 8.1, ni le petit logo ni le nom d’affichage n’apparaissent sur une vignette secondaire moyenne (150x150). Par ailleurs, il n’est pas possible de spécifier la couleur du texte de premier plan. Par conséquent, ces propriétés telles que définies dans cet exemple sont ignorées sur le téléphone.


tile.visualElements.showNameOnSquare150x150Logo = true;                        
tile.visualElements.foregroundText = Windows.UI.StartScreen.ForegroundText.light;
tile.visualElements.square30x30Logo = new Windows.Foundation.Uri("ms-appx:///Images/square30x30Tile-sdk.png");

Sur Windows, l’utilisateur doit confirmer l’épinglage d’une vignette secondaire. Dans la boîte de dialogue de confirmation, il peut remplacer le nom d’affichage de la vignette et effectuer une sélection parmi différentes tailles de vignette à épingler. Le menu volant de confirmation doit être affiché près du bouton qui a appelé la demande d’épinglage. Cet exemple récupère le rectangle entourant le bouton d’épinglage et spécifie que la boîte de dialogue de confirmation doit s’afficher au-dessus du bouton.

Remarque  Sur Windows Phone 8.1, aucune boîte de dialogue de confirmation ne s’affiche à l’utilisateur. La vignette est simplement épinglée à l’écran d’accueil sous la forme d’une vignette moyenne et sans nom d’affichage. Le code présenté ici est ignoré.


var element = document.getElementById("commandButton");
var selectionRect = element.getBoundingClientRect();
var buttonCoordinates = { x: selectionRect.left, y: selectionRect.top, width: selectionRect.width, height: selectionRect.height };
var placement = Windows.UI.Popups.Placement.above;

Ensuite, la fonction demande que la vignette secondaire soit épinglée.

  • Sur Windows Phone 8.1, cet appel épingle la vignette, suspend l’application et place l’utilisateur sur l’écran d’accueil.
  • Sur Windows, cet appel affiche le menu volant de confirmation qui demande à l’utilisateur l’autorisation d’épingler la vignette. En utilisant le rectangle entourant le bouton d’épinglage, cet exemple affiche le menu volant de confirmation au-dessus de ces coordonnées. En cas d’approbation de l’utilisateur, Windows crée la vignette secondaire et la place sur l’écran d’accueil. L’utilisateur reste dans l’application.

return new WinJS.Promise(function (complete, error, progress) {
    tile.requestCreateForSelectionAsync(buttonCoordinates, placement).done(function (isCreated) {
        if (isCreated) {
            complete(true);
        } else {
            complete(false);
        }
    });
});

Remarque  Sur Windows Phone 8.1, un appel à RequestCreateAsync ou RequestCreateForSelectionAsyncferme l’application et place l’utilisateur sur l’écran d’accueil. Tout code qui suit la méthode RequestCreateAsync ou RequestCreateForSelectionAsync n’est donc pas exécuté. Par conséquent, dans les projets Windows Phone 8.1, vous devez écouter l’événement Suspending pour pouvoir effectuer toute opération, telle que l’enregistrement de l’état de l’application, qui doit être exécutée avant la fermeture de l’application.

Les fonctions appbarButtonClicked et pinByElementAsync complètes de l’exemple de vignettes secondaires sont présentées ici.


function appbarButtonClicked() {
    document.getElementById("pinUnpinFromAppbar").winControl.sticky = true;

    if (WinJS.UI.AppBarIcon.unpin === document.getElementById("commandButton").winControl.icon) {
        unpinByElementAsync(document.getElementById("commandButton"), appbarTileId).done(function (isDeleted) {
            if (isDeleted) {
                WinJS.log && WinJS.log("Secondary tile was successfully unpinned.", "sample", "status");
                setAppbarButton();
            } else {
                WinJS.log && WinJS.log("Secondary tile was not unpinned.", "sample", "error");
                setAppbarButton();
            }
        });
    } else {
        pinByElementAsync(document.getElementById("commandButton"), appbarTileId, "Appbar pinned secondary tile").done(function (isCreated) {
            if (isCreated) {
                WinJS.log && WinJS.log("Secondary tile was successfully pinned.", "sample", "status");
                setAppbarButton();
            } else {
                WinJS.log && WinJS.log("Secondary tile was not pinned.", "sample", "error");
                setAppbarButton();
            }
        });
    }
}                        
                        
function pinByElementAsync(element, newTileID, newTileDisplayName) {

    var square150x150Logo = new Windows.Foundation.Uri("ms-appx:///Images/square150x150Tile-sdk.png");
    var square30x30Logo = new Windows.Foundation.Uri("ms-appx:///Images/square30x30Tile-sdk.png");

    var currentTime = new Date();
    var TileActivationArguments = newTileID + " was pinned at=" + currentTime;

    var tile = new Windows.UI.StartScreen.SecondaryTile(newTileID,
                                                        newTileDisplayName,
                                                        TileActivationArguments,
                                                        square150x150Logo,
                                                        Windows.UI.StartScreen.TileSize.square150x150);
                                                        
    tile.visualElements.foregroundText = Windows.UI.StartScreen.ForegroundText.light;
    tile.visualElements.square30x30Logo = square30x30Logo;
    tile.visualElements.showNameOnSquare150x150Logo = true;

    var selectionRect = element.getBoundingClientRect();

    return new WinJS.Promise(function (complete, error, progress) {
        tile.requestCreateForSelectionAsync({ x: selectionRect.left, y: selectionRect.top, width: selectionRect.width, height: selectionRect.height }, Windows.UI.Popups.Placement.above).done(function (isCreated) {
            if (isCreated) {
                complete(true);
            } else {
                complete(false);
            }
        });
    });
}

6. Créer une fonction de détachement

Lorsque la vignette secondaire est épinglée, le bouton d’épinglage devient un bouton de détachement et le gestionnaire d’événements de clic de ce bouton détache la vignette. Cet exemple fournit la fonction que le gestionnaire appelle pour détacher la vignette. Comme paramètres, la fonction accepte l’objet du bouton d’épinglage, à nouveau dans le but de placer le menu volant de confirmation, et l’ID unique de la vignette secondaire. Comme dans la fonction d’épinglage, l’appel de détachement retourne un objet Promise.

Remarque  Toute vignette secondaire peut également être détachée par le biais de la barre de l’application de l’écran d’accueil. Vous avez l’option de vous appuyer sur cette méthode pour le détachement, auquel cas vous n’avez pas besoin d’implémenter de fonctionnalités de détachement ni de fournir un bouton de détachement.

 

Remarque  Sur Windows Phone 8.1, l’utilisateur n’est pas invité à confirmer le détachement d’une vignette secondaire. Le détachement d’une vignette secondaire sur le téléphone est identique au détachement de toute autre vignette. Le code présenté ici est ignoré.


function unpinByElementAsync(element, unwantedTileID) {

    var selectionRect = element.getBoundingClientRect();
    var buttonCoordinates = { x: selectionRect.left, y: selectionRect.top, width: selectionRect.width, height: selectionRect.height };
    var placement = Windows.UI.Popups.Placement.above;

    var tileToDelete = new Windows.UI.StartScreen.SecondaryTile(unwantedTileID);
    
    return new WinJS.Promise(function (complete, error, progress) {
        tileToGetDeleted.requestDeleteForSelectionAsync(buttonCoordinates, placement).done(function (isDeleted) {
            if (isDeleted) {
                complete(true);
            } else {
                complete(false);
            }
        });
    });
}

7. Implémenter le gestionnaire d’événements pour votre bouton

Lorsque l’utilisateur sélectionne votre bouton sur la barre de l’application, un menu volant demande à l’utilisateur de confirmer. Pour garantir que la barre de l’application ne disparaît pas lorsque le menu volant apparaît, vous devez définir la propriété WinJS.UI.sticky de la barre de l’application. De même, vérifiez que le parent de votre menu volant est correctement attribué. Cet exemple appelle les fonctions setAppbarButton, pinByElementAsync et unpinByElementAsync que nous avons définies aux étapes précédentes.

Notez que le gestionnaire appelle setAppbarButton aussi bien en cas de succès que d’échec des opérations d’épinglage et de détachement. Si l’opération a réussi, le bouton bascule entre épinglage et détachement. Si l’opération a échoué, le bouton demeure en l’état. Dans les deux cas, la fonction doit être appelée pour rétablir la propriété WinJS.UI.sticky sur false, afin que la barre de l’application puisse être masquée.


function appbarButtonClicked() {
    document.getElementById("pinUnpinFromAppbar").winControl.sticky = true;

    if (WinJS.UI.AppBarIcon.unpin === document.getElementById("commandButton").winControl.icon) {
        unpinByElementAsync(document.getElementById("commandButton"), appbarTileId).done(function (isDeleted) {
            if (isDeleted) {
                WinJS.log && WinJS.log("Secondary tile was successfully unpinned.", "sample", "status");
                setAppbarButton();
            } else {
                WinJS.log && WinJS.log("Secondary tile was not unpinned.", "sample", "error");
                setAppbarButton();
            }
        });
    } else {
        pinByElementAsync(document.getElementById("commandButton"), appbarTileId, "App bar pinned secondary tile", "A secondary tile that was pinned by the user from the app bar").done(function (isCreated) {
            if (isCreated) {
                WinJS.log && WinJS.log("Secondary tile was successfully pinned.", "sample", "status");
                setAppbarButton();
            } else {
                WinJS.log && WinJS.log("Secondary tile was not pinned.", "sample", "error");
                setAppbarButton();
            }
        });
    }
}

Récapitulatif et étapes suivantes

Dans cette rubrique de démarrage rapide, vous avez défini un bouton sur une barre de l’application, qui permet à un utilisateur d’épingler ou de détacher une vignette secondaire. Vous avez créé la vignette secondaire, défini un grand nombre de ses propriétés et présenté la boîte de dialogue de confirmation à l’utilisateur qui entraîne l’ajout final de la vignette secondaire à l’écran d’accueil.

Après avoir épinglé une vignette secondaire, la vignette de l’application parente crée un URI (Uniform Resource Identifier) de canal afin de pouvoir communiquer avec la vignette secondaire. Pour plus d’informations, voir Démarrage rapide : envoi d’une notification à une vignette secondaire.

Rubriques associées

Exemple de vignettes secondaires

Vue d’ensemble des vignettes secondaires

Démarrage rapide : envoi d’une notification à une vignette secondaire

Recommandations et liste de vérification sur les vignettes secondaires

SecondaryTile class