ServiceWorkerContainer

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2018.

* Some parts of this feature may have varying levels of support.

La interfaz ServiceWorkerContainer de la API Service Worker proporciona un objeto que representa al service worker como una unidad general en el ecosistema de la red, incluidas las facilidades para registrar, cancelar y actualizar los service worker, y acceder al estado de los service worker y sus altas.

Lo que es más importante, expone el método ServiceWorkerContainer.register() que se usa para registrar los service worker y la propiedad ServiceWorkerContainer.controller que se usa para determinar si la página actual se controla activamente o no.

EventTarget ServiceWorkerContainer

Propiedades de instancia

ServiceWorkerContainer.controller Read only

Devuelve un objeto ServiceWorker si su estado es activating o activated (el mismo objeto devuelto por ServiceWorkerRegistration.active). Esta propiedad devuelve null durante una solicitud de actualización forzada (Shift + actualizar) o si no hay ningún worker activo.

ServiceWorkerContainer.ready Read only

Proporciona una forma de retrasar la ejecución del código hasta que un service worker esté activo. Devuelve un Promise que nunca se rechazará y que espera indefinidamente hasta que el ServiceWorkerRegistration asociado con la página actual tenga un ServiceWorkerRegistration.active. Una vez que se cumple esa condición, se resuelve con ServiceWorkerRegistration.

Eventos

controllerchange

Ocurre cuando el ServiceWorkerRegistration asociado del documento adquiere un nuevo active worker.

error Obsoleto No estándar

Se activa cada vez que se produce un error en los service worker asociados.

message

Ocurre cuando el objeto ServiceWorkerContainer recibe los mensajes entrantes (por ejemplo, a través de una llamada MessagePort.postMessage()).

Métodos de instancia

ServiceWorkerContainer.register()

Crea o actualiza un ServiceWorkerRegistration para el scriptURL dado.

ServiceWorkerContainer.getRegistration()

Obtiene un objeto ServiceWorkerRegistration cuyo alcance coincide con la URL del documento proporcionado. El método devuelve un Promise que se resuelve en ServiceWorkerRegistration o undefined.

ServiceWorkerContainer.getRegistrations()

Devuelve todos los objetos ServiceWorkerRegistration asociados con un ServiceWorkerContainer en una matriz. El método devuelve un Promise que se resuelve en una matriz de ServiceWorkerRegistration.

ServiceWorkerContainer.startMessages()

Inicia explícitamente el flujo de mensajes que se envían desde un service worker a las páginas bajo su control (por ejemplo, enviados a través de Client.postMessage()). Esto se puede usar para reaccionar antes a los mensajes enviados, incluso antes de que el contenido de esa página haya terminado de cargarse.

Ejemplos

El siguiente ejemplo primero verifica si el navegador es compatible con service worker. Si se admite, el código registra el service worker y determina si controla activamente la página. Si no es así, solicita al usuario que vuelva a cargar la página para que el service worker pueda tomar el control. El código también informa de cualquier error de registro.

js
if ("serviceWorker" in navigator) {
  // Registre un service worker alojado en la raíz del
  // sitio utilizando el alcance predeterminado.
  navigator.serviceWorker
    .register("/sw.js")
    .then((registration) => {
      console.log(
        "El registro del service worker se realizó correctamente:",
        registration,
      );

      // En este punto, opcionalmente puede hacer algo
      // con el registro. Ver https://developer.mozilla.org/es/docs/Web/API/ServiceWorkerRegistration
    })
    .catch((error) => {
      console.error(`El registro del service worker falló: ${error}`);
    });

  // Independientemente del registro, también mostremos información
  // sobre si la página actual está controlada por un service worker
  // existente y cuándo cambia ese controlador.

  // Primero, haga una verificación única si actualmente
  // hay un service worker en control.
  if (navigator.serviceWorker.controller) {
    console.log(
      "Esta página está actualmente controlada por: ",
      navigator.serviceWorker.controller,
    );
  }

  // Luego, registre un controlador para detectar cuándo
  // un service worker nuevo o actualizado toma el control.
  navigator.serviceWorker.oncontrollerchange = () => {
    console.log(
      "Esta página ahora está controlada por: ",
      navigator.serviceWorker.controller,
    );
  };
} else {
  console.log("Los service workers no son compatibles.");
}

Especificaciones

Specification
Service Workers
# serviceworkercontainer-interface

Compatibilidad con navegadores

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
ServiceWorkerContainer
controller
controllerchange event
getRegistration
getRegistrations
message event
messageerror event
ready
register
startMessages
Available in workers

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
No support
No support
See implementation notes.
Has more compatibility info.

Véase también