Esta página ha sido traducida del inglés por la comunidad. Aprende más y únete a la comunidad de MDN Web Docs.

View in English Always switch to English

ServiceWorkerContainer

Baseline Widely available *

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

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

Contexto seguro: Esta función está disponible solo en contextos seguros (HTTPS), en algunos o todos los navegadores que lo soportan.

Nota: Esta característica está disponible en Web Workers.

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 el registro y actualizar los service workers, y acceder al estado de los service workers y sus registros.

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

Los objetos ServiceWorkerContainer se exponen en el ámbito de la ventana a través de Navigator.serviceWorker y en los workers mediante WorkerNavigator.serviceWorker (si es compatible — consulte compatibilidad con navegadores).

EventTarget ServiceWorkerContainer

Propiedades de instancia

ServiceWorkerContainer.controller Read only

Un objeto ServiceWorker que representa al service worker activo que controla la página actual, o null si la página no tiene un service worker activo o en proceso de activación.

ServiceWorkerContainer.ready Read only

Devuelve un Promise que se resuelve con el ServiceWorkerRegistration asociado a la página actual, pero solo cuando hay un service worker activo. Esto proporciona un mecanismo para diferir la ejecución del código hasta que un service worker esté activo.

Métodos de instancia

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 un ServiceWorkerRegistration o undefined.

ServiceWorkerContainer.getRegistrations()

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

ServiceWorkerContainer.register()

Crea o actualiza un ServiceWorkerRegistration para el scriptURL dado.

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.

Eventos

controllerchange

Se dispara cuando el ServiceWorkerRegistration asociado al documento adquiere un nuevo worker active.

message

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

messageerror

Se dispara cuando el objeto ServiceWorkerContainer no puede deserializar los mensajes entrantes (por ejemplo, a través de una llamada a MessagePort.postMessage()).

Ejemplos

El siguiente ejemplo primero verifica si el navegador es compatible con service workers. Si es compatible, el código registra el service worker y determina si la página está siendo controlada activamente por el service worker. 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) {
  // Registrar 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 se puede hacer algo
      // con el registro. Ver https://mdn.go-mizu.dev/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, hacer una verificación única para saber 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, registrar un manejador 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 Nightly
# serviceworkercontainer-interface

Compatibilidad con navegadores

Véase también