--- title: ExtendableEvent slug: Web/API/ExtendableEvent tags: - API - Experimental - ExtendableEvent - Interface - Reference - Services Workers translation_of: Web/API/ExtendableEvent ---
{{APIRef("Service Workers API")}}{{SeeCompatTable}}

L'interface ExtendableEvent étend la durée de vie des évènemets {{event("install")}} et {{event("activate")}} envoyés dans la portée global dans le cycle de vie du service worker. Elle s'assure que les évènements fonctionnels (comme {{domxref("FetchEvent")}}) ne sont pas distribués avant de mettre à jour les shémas de la base de données et de vider l'ancien cache.

Si {{domxref("ExtendableEvent.waitUntil","waitUntil()")}} est appelé en dehors du gestionnaire ExtendableEvent, le navigateur doit lever InvalidStateError; notez que plusieurs appels vont s'empiler, et que les promesses de résultat seront ajoutées à la liste des promesses à vie étendue.

Note: Le comportement décrit dans le paragraphe précédent a été corrigé dans Firefox 43 (voir {{bug(1180274)}}).

Cette interface hérite de l'interface {{domxref("Event")}}.

{{InheritanceDiagram(700, 60, 20)}}

Note: Cette interface est disponnible seulement quand la portée globale est {{domxref("ServiceWorkerGlobalScope")}}. Elle n'est pas disponible quand c'est une {{domxref("Window")}}, ou le scope d'un autre genre de worker.

Constructeur

{{domxref("ExtendableEvent.ExtendableEvent()", "ExtendableEvent()")}}
Crée un nouvel object ExtendableEvent.

Propriétés

N'implémente pas de propriétés spécifiques, mais hérite celles de sont parent, {{domxref("Event")}}.

Méthodes

Hérite des méthodes de son parent {{domxref("Event")}}.

{{domxref("ExtendableEvent.waitUntil", "ExtendableEvent.waitUntil()")}}
Étend la durée de vie de l'évènement. Cette méthode doit être appelée dans {{event("install")}}{{domxref("EventHandler")}} pour le worker {{domxref("ServiceWorkerRegistration.installing", "installing")}} et dans {{event("active")}} {{domxref("EventHandler")}} pour le worker {{domxref("ServiceWorkerRegistration.active", "active")}}. 

Exemples

Ce fragment de code est tiré de l'exemple de lecture du service worker (voir l'exemple en live). Ce code appelle {{domxref("ExtendableEvent.waitUntil()")}} dans {{domxref("ServiceWorkerGlobalScope.oninstall")}}, retartant le traitement du worker {{domxref("ServiceWorkerRegistration.installing")}} après l'installation jusqu'à ce que la promesse se résolve. La promesse se résoud quand toutes les ressources ont été récupérés et mises en cache, ou quand une exception est lévée.

Ce fragent de code montre aussi une bonne pratique pour construire des versions de cache utilisé par le service worker. Même s'il n'y a qu'un cache dans cet exemple, la même approche peut être utilisée pour plusieurs caches. Il lie un identifiant court pour un cache avec un nom de cache spécifique et versionné. 

Note: Dans Chrome, les messages de logging sont visible dans l'interface "Inspect" pour le service worker concerné, accessible via chrome://serviceworker-internals.

var CACHE_VERSION = 1;
var CURRENT_CACHES = {
  prefetch: 'prefetch-cache-v' + CACHE_VERSION
};

self.addEventListener('install', function(event) {
  var urlsToPrefetch = [
    './static/pre_fetched.txt',
    './static/pre_fetched.html',
    'https://www.chromium.org/_/rsrc/1302286216006/config/customLogo.gif'
  ];

  console.log('Installation en cours. Ressources à pré-charger :', urlsToPrefetch);

  event.waitUntil(
    caches.open(CURRENT_CACHES['prefetch']).then(function(cache) {
      cache.addAll(urlsToPrefetch.map(function(urlToPrefetch) {
        return new Request(urlToPrefetch, {mode: 'no-cors'});
      })).then(function() {
        console.log('Toutes les ressources ont été chargées et mises en cache.');
      });
    }).catch(function(error) {
      console.error('Erreur de pré-chargement :', error);
    })
  );
});
Important: Au moment du chargement des ressources, il est très important d'utiliser {mode: 'no-cors'} s'il y a une chance que la ressource soit servie depuis un serveur qui ne supporte pas le CORS. Dans cet exemple, www.chromium.org ne support pas le CORS.

Spécifications

Spécification Statut Commentaire
{{SpecName('Service Workers', '#extendable-event', 'ExtendableEvent')}} {{Spec2('Service Workers')}} Définition initiale

Compatibilité des navigateurs

{{CompatibilityTable}}
Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Support de base {{CompatChrome(40.0)}} {{ CompatGeckoDesktop("44.0") }} {{CompatNo}} 24 {{CompatNo}}
Fonctionnalité Android Firefox Mobile (Gecko) Firefox OS IE Mobile Opera Mobile Safari Mobile Chrome for Android
Support de base {{CompatUnknown}} {{ CompatGeckoMobile("44.0") }} {{ CompatVersionUnknown }} {{CompatNo}} {{CompatUnknown}} {{CompatNo}} {{CompatUnknown}}

See also