ServiceWorker
=============

L'interface **`ServiceWorker`** de l'API ServiceWorker (en-US) met à disposition une référence vers un service worker. Plusieurs contextes de navigations (par exemple une page, un *worker*, etc.) peuvent être associés au même service worker, chacun à travers un unique objet `ServiceWorker`.

Un objet `ServiceWorker` est disponible dans les propriétés `ServiceWorkerRegistration.active` et `ServiceWorkerContainer.controller` (en-US) — c'est un service worker qui a été activé et qui contrôle la page (ce service worker a été bien enregistré, et la page contrôlée a été rechargée).

L'interface `ServiceWorker` est distribuée à travers différents évènements de son cycle de vie — `install` et `activate` — et d'utilisation, comme `fetch`. Un objet `ServiceWorker` a un état associé `ServiceWorker.state`, lié à son cycle de vie.

Propriétés
----------

*L'interface `ServiceWorker` hérite des propriétés de son parent, le `Worker`.*

`ServiceWorker.scriptURL` (en-US) Lecture seule 

Retourne la `scriptURL` sérialisée du `ServiceWorker`, définie comme une partie du `ServiceWorkerRegistration` (en-US). Cette URL doit avoir la même origine que le document qui enregistre le `ServiceWorker`.

`ServiceWorker.state` Lecture seule 

Retourne le status du service worker. Il retourne l'une des valeurs suivantes : `installing`, `installed,` `activating`, `activated`, or `redundant`.

### Gestionnaires d'évènements

`ServiceWorker.onstatechange` Lecture seule 

Une propriété `EventListener` est appelée quand un évènement de type `statechange` est déclenché; c'est le cas dès que le `ServiceWorker.state` change.

Méthodes
--------

L'interface du *`ServiceWorker` hérite des méthodes de son parent, `Worker`, avec l'exception de `Worker.terminate`, qui ne doit pas être accessible depuis le service worker.*

Exemples
--------

Ce fragment de code provient d'un exemple d'enregistrement d'évènement pour le service worker (démo en direct). Le code écoute tout changement du `ServiceWorker.state` et retourne sa valeur.


```js
if ('serviceWorker' in navigator) {
  navigator.serviceWorker
    .register('service-worker.js', {
      scope: './'
    })
    .then(({ installing, waiting, active }) => {
      let serviceWorker
      if (installing) {
        serviceWorker = installing
        document.querySelector('#kind').textContent = 'installé'
        else if (waiting) {
        serviceWorker = waiting
           document.querySelector
               } else if (active) {
        serviceWorker = active
        document.querySelector('#kind').textContent = 'actif'
      }
      if (serviceWorker) {
        // logState(serviceWorker.state);
        serviceWorker.addEventListener('statechange', (e) => {
          // logState(e.target.state);
        })
      }
    })
    .catch((error) => {
      // L'enregistrement s'est mal déroulé. Le fichier service-worker.js
      // est peut-être indisponible ou contient une erreur.
    })
} else {
  // Le navigateur ne supporte pas les service workers.
}
```

Spécifications
--------------

| Specification |
| --- |
| Service Workers # serviceworker-interface |

Compatibilité des navigateurs
-----------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Voir aussi
----------

* ServiceWorker Cookbook
* Using Service Workers (en-US)
* Service workers basic code example
* Is ServiceWorker ready?
* `Promise`
* Using web workers (en-US)