From 28adceb2762cdf6212a1c374525398a3680c23d3 Mon Sep 17 00:00:00 2001 From: SphinxKnight Date: Tue, 31 Aug 2021 21:18:38 +0200 Subject: Revamp fr page to match en-US / fixes #2050 (#2266) --- .../using_the_notifications_api/index.html | 354 ++++++++++----------- 1 file changed, 165 insertions(+), 189 deletions(-) (limited to 'files/fr/web/api') diff --git a/files/fr/web/api/notifications_api/using_the_notifications_api/index.html b/files/fr/web/api/notifications_api/using_the_notifications_api/index.html index 34789ad74d..694ad26f34 100644 --- a/files/fr/web/api/notifications_api/using_the_notifications_api/index.html +++ b/files/fr/web/api/notifications_api/using_the_notifications_api/index.html @@ -1,276 +1,252 @@ --- -title: Utilisation des Notifications Web +title: Utilisation de l'API Notifications slug: Web/API/Notifications_API/Using_the_Notifications_API -tags: - - Avancé - - DOM - - Firefox OS - - Guide - - Notifications translation_of: Web/API/Notifications_API/Using_the_Notifications_API original_slug: Web/API/notification/Using_Web_Notifications --- -

{{SeeCompatTable}}

+

{{APIRef("Web Notifications")}}{{AvailableInWorkers}}{{securecontext_header}}

-

En bref

+

L'API Notifications permet à une application ou à une page web d'envoyer des notifications affichées en dehors de la page par le système sous-jacent. Cela permet aux applications web d'envoyer des informations aux utilisatrices et utilisateurs même lorsque l'application est en veille ou en arrière-plan. Dans cet article, nous verrons les bases de cette API afin de vous permettre de l'utiliser dans vos propres applications.

-

L'API de Notifications Web permet à une page Web d'envoyer des notifications qui s'affichent hors de la page au niveau du système. Cela permet aux applications web d'envoyer des informations à un utilisateur, même si l'application est inactive. Un des principaux cas d'utilisation évidente est une application de messagerie Web qui informe l'utilisateur à chaque fois qu'un nouvel e-mail est reçu, même si l'utilisateur fait autre chose avec une autre application.

+

Généralement, le système sous-jacent utilisé pour les notifications est celui du système d'exploitation. Voyez par exemple comment votre appareil mobile ou ordinateur affiche certaines notifications.

-

Pour afficher des notifications, il faut commencer par demander la permission appropriée et d'instancier un objet {{domxref("Notification")}} :

+

Une capture d'écran d'Android avec trois notifications.

-
Notification.requestPermission( function(status) {
-  console.log(status); // les notifications ne seront affichées que si "autorisées"
-  var n = new Notification("title", {body: "notification body"}); // this also shows the notification
-});
-
+

Le système de notification du système d'exploitation variera selon la plateforme et le navigateur mais ce n'est pas un problème en soi : l'API Notifications a été conçue de façon suffisamment générique pour être compatible avec la plupart des systèmes de notification.

-

Obtenir l'autorisation

+

Exemples

-

Avant qu'une application ne soit capable d'envoyer une notification, l'utilisateur doit donner son accord. C'est une exigence commune quand une API tente d'interagir avec quoi que ce soit en dehors d'une page Web. Cela permet d'éviter les notifications "spam" pour le bien-être de l'utilisateur.

+

Un des cas d'usage parmi les plus évidents pour les notifications est un client mail web ou une application de messagerie instantanée qui notifie dès qu'un nouveau message a été reçu, y compris lorsqu'on utilise l'appareil pour autre chose avec une autre application. De nombreux exemples existent pour ce cas, Slack en est un parmi d'autres.

-

Vérifier l'état de la permission

+

Nous avons écrit un exemple concret : une application pour gérer des listes de trucs à faire (« to-do ») pour vous donner une meilleure idée de la façon dont les notifications web peuvent être utilisées. Les données sont stockées localement avec IndexedDB et les utilisateurs sont notifiés lorsque les tâches arrivent à échéance grâce aux notifications système. Téléchargez le code de cette application, ou testez l'application en live.

-

Une application qui a besoin d'envoyer une notification peut vérifier l'état d'autorisation actuel grâce à la propriété non modifiable {{domxref("Notification.permission")}} . Il peut avoir l'une des trois valeurs possibles :

+

Demander la permission

- +

Avant qu'une application puisse envoyer une notification, l'utilisatrice ou l'utilisateur doit lui accorder le droit de le faire. Il s'agit d'un prérequis courant pour les API qui doivent interagir en dehors d'une page web : l'utilisatrice ou l'utilisateur doit, au moins une fois, explicitement accorder la permission à l'application d'afficher des notifications. La personne contrôle ainsi quels sites ou applications sont autorisés à afficher des notifications.

-
-

Note: Safari et Chrome antérieurs à v32 n'appliquent pas encore la propriété  permission .

-
+

En raison d'abus des notifications par le passé, les équipes des navigateurs web ont commencé à mettre en place des stratégies pour limiter ce problème. Dans la pratique, vous ne devriez demander la permission à une personne uniquement après que celle-ci a interagi avec votre site/application (par exemple en ayant cliqué sur un bouton). Il ne s'agit pas seulement d'une bonne pratique (on ne devrait pas ennuyer les utilisatrices et utilisateurs avec de trop nombreuses notifications indésirées) mais d'une méthode qui sera implémentée par les différents navigateurs : Firefox le fait depuis Firefox 72 et Safari le fait également depuis quelque temps.

-

Recevoir la permission

+

De plus, pour Chrome et Firefox, il n'est pas possible de demander la permission d'afficher des notifications à moins que le site soit servi dans un contexte sécurisé (c'est-à-dire avec HTTPS) et il n'est plus possible de demander une telle permission depuis une <iframe> d'une origine tierce.

-

Si l'autorisation n'est pas accordée, l'application doit utiliser la méthode {{domxref("Notification.requestPermission()")}} pour permettre à l'utilisateur de faire un choix. Cette méthode accepte une fonction de rappel qui reçoit la permission choisie par l'utilisateur pour réagir.

+

Vérifier l'état de la permission

-

C'est une pratique usuelle de demander l'autorisation à l'initialisation de l'application:

+

Vous pouvez vérifier si la permission a déjà été accordée ou non grâce à la propriété en lecture seule Notification.permission. Cette dernière peut avoir l'une de ces trois valeurs :

-
window.addEventListener('load', function () {
-  Notification.requestPermission(function (status) {
-    // Cela permet d'utiliser Notification.permission avec Chrome/Safari
-    if (Notification.permission !== status) {
-      Notification.permission = status;
-    }
-  });
+
+
default
+
La permission n'a pas encore été demandée à l'utilisatrice ou l'utilisateur, les notifications ne seront pas affichées.
+
granted
+
La permission d'afficher des notifications a été accordée après que la demande a été affichée.
+
denied
+
La permission d'afficher des notifications a été explicitement refusée.
+
+ +

Obtenir la permission

+ +

Si la permission n'a pas encore été accordée, l'application devra utiliser la méthode Notification.requestPermission() afin de la demander. Une version très basique consiste à inclure :

+ +
Notification.requestPermission().then(function(result) {
+  console.log(result);
 });
-
-

Note: Chrome ne permettait pas l'appel à {{domxref("Notification.requestPermission()")}} dans l'event load jusqu'à sa version 37 (voir issue 274284).

-
+

Cela utilise la version de la méthode sous forme de promesse. Si vous souhaitez ou avez besoin de prendre en charge les versions antérieures, vous pourrez avoir besoin de version sous forme d'une fonction de rappel (callback) :

-

Manifeste des permissions pour l'API de Notification

+
Notification.requestPermission();
-

Notez que tant que que l'API de Notification API n'est pas privileged ou certifiée, il vous faudra toujours ajouter une entrée dans votre ficher manifest.webapp pour l'inclure dans une application web ouverte:

+

Cette version accepte en paramètre une fonction de rappel qui sera appelée une fois que l'utilisatrice ou l'utilisateur aura répondu à la demande de permission.

-
"permissions": {
-  "desktop-notification": {
-    "description": "Needed for creating system notifications."
-  }
-}
+

Exemple

-
-

Remarque : quand une application est installée, vous ne devriez pas avoir besoin de demander la permission explicitement par le code ci-dessus, mais vous aurez toujours besoin de l'entrée des autorisations ci-dessus pour que les notifications soient lancées.

-
+

Dans notre application de démonstration, nous avons inclus un bouton « Activer les notifications » qui, lorsqu'il est pressé, demande la permission pour l'application.

-

Créer une notification

+
<button id="enable">Activer les notifications</button>
-

Créer une notification peut être simplement réalisé en utilisant le constructeur {{domxref("Notification")}}. Ce constructeur s'attend à recevoir un titre à afficher dans la notification et quelques options pour la personnaliser telles qu'une icône {{domxref("Notification.icon","icon")}} ou un texte {{domxref("Notification.body","body")}}.

+

Cliquer sur ce bouton déclenche l'appel à la fonction askNotificationPermission() :

-

Une notification sera affichée dès que possible. Pour connaître son statut d'affichage, quatre événements peuvent être déclenchés au niveau de {{domxref("Notification")}} :

+
function askNotificationPermission() {
+  // La fonction qui sert effectivement à demander la permission
+  function handlePermission(permission) {
+    // On affiche ou non le bouton en fonction de la réponse
+    if(Notification.permission === 'denied' || Notification.permission === 'default') {
+      notificationBtn.style.display = 'block';
+    } else {
+      notificationBtn.style.display = 'none';
+    }
+  }
 
-
    -
  • {{event("show")}}: déclenché quand la notification est affichée à l'utilisateur.
  • -
  • {{event("click")}}: déclenché quand l'utilisateur clique sur la notification.
  • -
  • {{event("close")}}: déclenché quand la notification est fermée.
  • -
  • {{event("error")}}: déclenché quand quelque chose n'a pas fonctionné avec cette notification (surtout quand quelque chose empêche la notification d'être affichée)
  • -
+ // Vérifions si le navigateur prend en charge les notifications + if (!('Notification' in window)) { + console.log("Ce navigateur ne prend pas en charge les notifications."); + } else { + if(checkNotificationPromise()) { + Notification.requestPermission() + .then((permission) => { + handlePermission(permission); + }) + } else { + Notification.requestPermission(function(permission) { + handlePermission(permission); + }); + } + } +}
+ +

Commençons par jeter un œil au deuxième bloc de code : vous verrez qu'on commence par vérifier la prise en charge de l'API Notifications. Si celle-ci est bien disponible, on regarde si la version à base de promesses pour Notification.requestPermission() est prise en charge. Si c'est le cas, on utilise cette version (prise en charge partout à l'exception de Safari) et sinon, on utilise l'ancienne version avec le callback (prise en charge par Safari).

-

Ces événements peuvent être suivis en utilisant les gestionnaires d'événements {{domxref("Notification.onshow","onshow")}}, {{domxref("Notification.onclick","onclick")}}, {{domxref("Notification.onclose","onclose")}}, ou {{domxref("Notification.onerror","onerror")}}. Car {{domxref("Notification")}} hérite également de {{domxref("EventTarget")}}, Il est possible d'utiliser cette {{domxref("EventTarget.addEventListener","addEventListener()")}} méthode..

+

Pour éviter la duplication du code, nous avons stocké quelques lignes dans la fonction handlePermission() qui correspond au premier bloc de ce fragment de code. Dans cette fonction, on définit explicitement la valeur de Notification.permission (certaines anciennes versions de Chrome avaient un bug et ne réalisaient pas cette initialisation automatiquement) puis on affiche ou on masque le bouton selon que la permission a déjà été demandée ou non. On ne veut pas afficher le bouton si la permission a déjà été accordée, en revanche, si elle a été déclinée, on veut permettre à l'utilisatrice ou à l'utilisateur de changer d'avis plus tard.

-

Note: Firefox et Safari ferment automatiquement les notifications après un certain temps, de l'ordre de 4 secondes.

+

Note : Avant Chrome 37, Chrome ne permettait pas d'appeler Notification.requestPermission() dans le gestionnaire d'évènements load (voir le bug 274284).

+
-

Cela peut aussi être fait au niveau de l'application web en utilisant la méthode {{domxref("Notification.close()")}},  comme par exemple dans le code suivant:

+

Détecter la prise en charge de requestPermission() en promesse

-
var n = new Notification("Salut!");
-n.onshow = function () {
-  setTimeout(n.close.bind(n), 5000);
-}
-
+

Plus haut, nous avons dit vérifier la prise en charge du navigateur pour la version de Notification.requestPermission() avec les promesses. Pour cela, nous avons utilisé :

-

Quand vous recevez un événement "close", il n'y a aucune garantie que l'utilisateur ait lui-même fermé la notification. C'est en accord avec la spécification, qui dit : "When a notification is closed, either by the underlying notifications platform or by the user, the close steps for it must be run." soit "Quand une notification est fermée, que ce soit par la plateforme ou par l'utilisateur, on procède à l'étape de clôture."

- +
function checkNotificationPromise() {
+    try {
+      Notification.requestPermission().then();
+    } catch(e) {
+      return false;
+    }
 
-

Un petit exemple

+ return true; + }
-

En considérant ce petit bout de HTML assez simple :

+

Cela permet de vérifier la présence d'une méthode .then() sur requestPermission(). Si une telle fonction est présente, on continue et on renvoie true. Sinon, on renvoie false dans le bloc de code catch() {}.

-
<button>Notifiez moi!</button>
+

Créer une notification

-

Il est possible de gérer les notifications de cette façon :

+

Pour créer une notification, on utilisera le constructeur Notification. Ce constructeur attend un titre à afficher au sein de la notification et permet d'utiliser différentes options pour améliorer la notification comme une icône ou un texte (body).

-
window.addEventListener('load', function () {
-  // Premièrement, vérifions que nous avons la permission de publier des notifications. Si ce n'est pas le cas, demandons la
-  if (window.Notification && Notification.permission !== "granted") {
-    Notification.requestPermission(function (status) {
-      if (Notification.permission !== status) {
-        Notification.permission = status;
-      }
-    });
-  }
+

Par exemple, dans notre application de démonstration, on utilise le fragment de code suivant pour créer une notification lorsque c'est nécessaire (ce fragment se trouve dans la fonction createNotification()) :

- var button = document.getElementsByTagName('button')[0]; +
const img = '/to-do-notifications/img/icon-128.png';
+const text = 'Coucou ! Votre tâche "' + titre + '" arrive maintenant à échéance.';
+const notification = new Notification('Liste de trucs à faire', { body: text, icon: img });
- button.addEventListener('click', function () { - // Si l'utilisateur accepte d'être notifié - if (window.Notification && Notification.permission === "granted") { - var n = new Notification("Coucou !"); - } +

Fermer les notifications

- // Si l'utilisateur n'a pas choisi s'il accepte d'être notifié - // Note: à cause de Chrome, nous ne sommes pas certains que la propriété permission soit définie, par conséquent il n'est pas sûr de vérifier la valeur par défaut. - else if (window.Notification && Notification.permission !== "denied") { - Notification.requestPermission(function (status) { - if (Notification.permission !== status) { - Notification.permission = status; - } +

On utilisera la méthode close() afin de retirer une notification qui n'est plus pertinente (par exemple parce que la personne l'a déjà lue sur la page web s'il s'agit d'une messagerie ou, dans le cas d'un lecteur de musique, si la chanson en cours de lecture a déjà changé). La plupart des navigateurs effacent les notifications après un certain délai (généralement autour de 4 secondes) mais ça ne devrait pas être un souci particulier, car cette tâche est souvent gérée par l'utilisateur ou l'agent utilisateur. La fermeture peut également être gérée par le système d'exploitation et les utilisatrices et utilisateurs doivent avoir la main sur ce comportement. D'anciennes versions de Chrome ne retiraient pas les automatiquement les notifications et vous pouvez donc utiliser un setTimeout() uniquement pour ces versions historiques.

- // Si l'utilisateur est OK - if (status === "granted") { - var n = new Notification("Coucou !"); - } +
const n = new Notification('Une super chanson');
+document.addEventListener('visibilitychange', function() {
+  if (document.visibilityState === 'visible') {
+    // L'onglet est désormais visible et la notification n'est plus pertinente
+    // on peut la fermer
+    n.close();
+  }
+});
+
- // Sinon, revenons en à un mode d'alerte classique - else { - alert("Coucou !"); - } - }); - } +
+

Note : Cette API ne devrait pas être utilisée pour retirer la notification de l'écran après un délai donné car elle supprimera également la notification de la liste des notifications et empêchera toute interaction avec celle-ci après qu'elle a initialement été affichée.

+
- // Si l'utilisateur refuse d'être notifié - else { - // We can fallback to a regular modal alert - alert("Coucou !"); - } - }); -});
+
+

Note : Lorsque vous recevez un évènement close, il n'y a aucune garantie que celui-ci provienne de l'utilisatrice ou de l'utilisateur. Cela correspond à la spécification qui indique : « lorsqu'une notification est fermée, que ce soit par la plateforme sous-jacente ou par l'utilisateur, l'étape de fermeture correspondante doit être exécutée. ».

+
-

Et voici le résultat:

+

Évènements relatifs aux notifications

-

{{ EmbedLiveSample('Simple_example', '100%', 30) }}

+

Quatre évènements sont déclenchés sur une instance de Notification :

-

Gestion des notifications répétitives

+
+
click
+
Déclenché lorsque la personne clique sur la notification.
+
close
+
Déclenché lorsque la notification a été fermée.
+
error
+
Déclenché si une erreur se produit avec la notification. Généralement, cela a lieu lorsqu'il y a un problème d'affichage.
+
show
+
Déclenché lorsque la notification est affichée.
+
-

Dans certains cas, il peut être dérangeant pour l'utilisateur de lui envoyer un nombre élevé de notifications - par exemple, si une application pour la messagerie instantanée peut notifier à un utilisateur pour chaque message entrant. Pour éviter une invasion de "bulles" sur le bureau de l'utilisateur avec des centaines de notifications inutiles, il est possible de prendre en charge la file d'attente des notifications en attente.

+

Ces évènements peuvent être suivis avec les gestionnaires d'évènement onclick, onclose, onerror, et onshow. Notification héritant également de EventTarget, il est aussi possible d'utiliser la méthode addEventListener().

-

Pour ce faire, il est possible d'ajouter un tag à toute nouvelle notification. Si une notification a déjà le même tag et n'a pas encore été affichée, la nouvelle notification va remplacer l'ancienne. Si la notification avec le même tag a déjà été affichée, l'ancienne notification est fermée et la nouvelle est affichée.

+

Remplacer les notifications existantes

-

Exemple de Tag

+

Il est généralement peu souhaitable de recevoir de nombreuses notifications sur une courte période. Par exemple, que se passerait-il si une messagerie envoyait une notification pour chaque message reçu alors qu'une discussion est en cours ? Pour éviter de submerger l'utilisatrice ou l'utilisateur avec de trop nombreuses notifications, il est possible de modifier les notifications en attente en remplaçant une ou plusieurs notifications avec une nouvelle notification à jour.

-

Considérons le code HTML suivant:

+

Pour cela, on pourra ajouter une balise à toute nouvelle notification. Si une notification existante possède la balise correspondante et qu'elle n'a pas encore été affichée, la nouvelle notification remplacera la précédente. Si une notification avec la même balise a déjà été affichée, elle est fermée et la nouvelle notification est affichée.

-
<button>Notifie moi!</button>
+

Exemple d'utilisation des balises

-

Il est possible de gérer plusieurs notifications de cette manière:

+

Prenons le fragment HTML qui suit :

-
window.addEventListener('load', function () {
-  // Premièrement, vérifions que nous avons la permission de notifier
-  // Sinon, demandons la permission
-  if (window.Notification && Notification.permission !== "granted") {
-    Notification.requestPermission(function (status) {
-      if (Notification.permission !== status) {
-        Notification.permission = status;
-      }
-    });
-  }
+
<button>Envoyez une notification !</button>
+ +

Il est possible de gérer plusieurs notifications ainsi :

- var button = document.getElementsByTagName('button')[0]; +
window.addEventListener('load', function () {
+  const button = document.getElementsByTagName('button')[0];
 
   button.addEventListener('click', function () {
-    // Si l'utilisateur accepte les notifications
+    // Si l'utilisateur a permis les notifications
     // essayons d'envoyer 10 notifications
     if (window.Notification && Notification.permission === "granted") {
-      for (var i = 0; i < 10; i++) {
-        // Grâce au tag, nous ne devrions voir que la notification "Hey! 9"
-        var n = new Notification("Hey! " + i, {tag: 'soManyNotification'});
-      }
+      let i = 0;
+      // On utilise un intervalle, car certains navigateurs (dont Firefox)
+      // bloquent les notifications s'il y en a trop sur une période
+      // donnée
+      const interval = window.setInterval(function () {
+        // Avec la balise, on ne devrait voir que la notification "Coucou ! 9"
+        const n = new Notification("Coucou ! " + i, {tag: 'soManyNotification'});
+        if (i++ == 9) {
+          window.clearInterval(interval);
+        }
+      }, 200);
     }
 
-    // Si l'utilisateur n'a pas choisi s'il accepte d'être notifié // Note: à cause de Chrome, nous ne sommes pas certains que la
-    // propriété permission soit définie, par conséquent il n'est pas
-    // sûr de vérifier la valeur par défault.
+    // Si l'utilisateur n'a pas encore autorisé ou non
+    // Note : À cause de Chrome, on ne peut pas s'assurer que la propriété permission 
+    // est définie et il est donc dangereux de vérifier la valeur "default"
     else if (window.Notification && Notification.permission !== "denied") {
       Notification.requestPermission(function (status) {
-        if (Notification.permission !== status) {
-          Notification.permission = status;
-        }
-
-        // Si l'utilisateur a accepté les notifications
+        // Si la permission a été accordée
         if (status === "granted") {
-          for (var i = 0; i < 10; i++) {
-            // Grâce au tag, nous ne devrions voir que la notification "Hey! 9"
-            var n = new Notification("Hey! " + i, {tag: 'soManyNotification'});
-          }
+          var i = 0;
+          // On utilise un intervalle, car certains navigateurs (dont Firefox)
+          // bloquent les notifications s'il y en a trop sur une période
+          // donnée
+          var interval = window.setInterval(function () {
+            // Avec la balise, on ne devrait voir que la notification "Coucou ! 9"
+            const n = new Notification("Coucou ! " + i, {tag: 'soManyNotification'});
+            if (i++ == 9) {
+              window.clearInterval(interval);
+            }
+          }, 200);
         }
 
-        // Sinon on bascule sur une alerte modale
+        // Sinon, on peut utiliser une alerte modale classique
         else {
-          alert("Hey!");
+          alert("Coucou !");
         }
       });
     }
 
-    // Si l'utilisateur refuse les notifications
+    // Si l'utilisateur a refusé les notifications
     else {
-      // on bascule sur une alerte modale
-      alert("Hey!");
+      // On utilise une alerte modale classique
+      alert("Coucou !");
     }
   });
 });
-

Et voici le résultat:

- -

{{ EmbedLiveSample('Tag_example', '100%', 30) }}

- -

Recevoir la notification du clic sur une notification

- -

Quand un utilisateur clique sur une notification générée par une application, il sera notifié de cet événement de deux façons, en fonction de la circonstance:

- -
    -
  1. Un événement click si votre application n'a pas été fermée ou placée en arrière-plan entre le moment où vous créez la notification et celui où l'utilisateur clique dessus.
  2. -
  3. Sinon un message système
  4. -
+

Voir le résultat de cet exemple :

-

Voir cet extrait de code pour un exemple d'utilisation.

+

{{EmbedLiveSample('tag_example', '100%', 30)}}

-

Spécifications

+

Spécifications

- - - - - - - - - - - - - - - -
SpécificationStatutCommentaire
{{SpecName('Web Notifications')}}{{Spec2('Web Notifications')}}Spécification initiale
+

{{Specifications("api.Notification")}}

-

Compatibilité Navigateurs

+

Compatibilité des navigateurs

-

{{page("/fr/Web/API/Notification","Browser compatibility")}}

+

{{Compat("api.Notification")}}

-

A lire aussi

+

Voir aussi

-- cgit v1.2.3-54-g00ecf