Les API multimédia et graphiques en HTML5, exemples avec <audio/>, <video/> et <canvas/>

Web Storage

Reprendre le code de l'exercice précédent.

Le but de cet exercice est d'utiliser l'API Web Storage pour stocker des informations.

Question

Supposons que l'utilisateur ait accès à un formulaire basique pour commenter un article.

Le Web Storage peut être utilisé pour éviter qu'il n'ait à saisir ses données à nouveau en cas d'invalidation du formulaire, d'erreur de connexion...

Ajouter le formulaire ci-dessous à la fin d'un élément article de son choix :

1
<form onsubmit="return false;">
2
    <input type="text" id="comment" placeholder="Un commentaire ?"/><br/>
3
    <button type="submit">Envoyer</button>
4
</form>

Placer également le script incomplet suivant à la fin de l'élément body :

1
<script>
2
    // Détection du support
3
    if(typeof sessionStorage != 'undefined') {
4
        // code
5
    } else {
6
        alert("sessionStorage n'est pas supporté");
7
    };
8
</script>

Écrire le code qui permet lors de la détection de l'événement onchange du commentaire de le stocker dans le sessionStorage.

Au chargement de la page, on vérifie si la clé correspondante existe ; le cas échéant, le commentaire doit prendre comme valeur initiale la valeur stockée.

Rappel : on peut accéder à un élément du DOM d'après son id avec la méthode suivante : document.getElementById('id').

Indice

Placer un attribut 'onchange' dans l'élément input du commentaire. La valeur de l'attribut est interprétée comme du code JavaScript. On accède à la valeur actuelle saisie avec this.value.

Indice

Utiliser la méthode sessionStorage.setItem(clé, valeur).

Indice

('cle' in sessionStorage) renvoie true si la clé fournie existe dans le sessionStorage.

On peut aussi directement utiliser le getter sessionStorage.getItem pour tester l'existance.

Solution
1
<--! ... -->
2
3
<input type="text" id="comment" placeholder="Un commentaire ?" onchange="saveComment(this.value);"/>
4
5
<--! ... -->
6
7
<script>
8
// Détection du support
9
if (typeof sessionStorage != 'undefined') {
10
    if ('comment' in sessionStorage) {
11
        document.getElementById('comment').value = sessionStorage.getItem('comment');
12
    }
13
                
14
    function saveComment(comment) {
15
        sessionStorage.setItem('comment', comment);
16
    }
17
                
18
} else {
19
    alert("sessionStorage n'est pas supporté");
20
};
21
</script>

Question

Vérifier que le code précédent fonctionne au rechargement de l'onglet. Attention : il est nécessaire de quitter la zone de saisie (cliquer en dehors de la zone, n'importe où sur la page) pour que l'événement 'onchange' soit bien déclenché.

Tester le comportement du sessionStorage en fermant le navigateur puis en l'ouvrant à nouveau. Utiliser à la place le localStorage pour observer le changement de comportement.

[Question complémentaire, à faire chez soi] Compteur de visites

On souhaite maintenant intégrer un compteur de visites côté client de la page.

Insérer le code suivant à la fin de l'élément footer :

1
<p>Vous avez vu cette page <span id="visites"></span> fois !</p>

Question

Écrire le code JavaScript qui affiche la bonne valeur dans l'élément visites au chargement de la page.

On utilisera le localStorage afin que le compteur s'incrémente correctement indépendamment des sessions du navigateur.

Indice

Les étapes du script sont :

  1. Récupérer la clé dans localStorage au chargement de la page.

  2. Vérifier si la valeur existe, le cas échéant la convertir vers un entier (fonction parseInt(valeur)).

  3. Incrémenter le compteur.

  4. Le re-stocker dans le localStorage.

  5. Afficher sa nouvelle valeur (en modifiant l'attribut innerHTML de l'élément span).

Solution
1
var visites = 0;
2
if (visites = localStorage.getItem('visites')) {
3
    visites = parseInt(visites);
4
}
5
++visites;
6
localStorage.setItem('visites', visites);
7
document.getElementById('visites').innerHTML = visites;
PrécédentPrécédentFin
AccueilAccueilImprimerImprimer Rihab Hachem, Cindy Pinvin, Baptiste Perraud, 2014-2016 (Contributions : Stéphane Crozat, les étudiants de l'UTC) Paternité - Partage des Conditions Initiales à l'IdentiqueRéalisé avec Scenari (nouvelle fenêtre)