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

ServiceWorker

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 ServiceWorker de la API de Service Worker proporciona una referencia a un service worker. Múltiples contextos de navegación (por ejemplo, páginas, workers, etc.) pueden estar asociados con el mismo service worker, cada uno a través de un objeto ServiceWorker único.

Se puede acceder a un objeto ServiceWorker a través de varias propiedades:

La propiedad ServiceWorker.state y el evento statechange se pueden usar para comprobar y observar los cambios en el estado del ciclo de vida del service worker asociado al objeto. Los eventos relacionados del ciclo de vida, como install y activate, se disparan en el propio service worker.

Los service workers permiten la importación estática de módulos ECMAScript, si son compatibles, usando import. La importación dinámica no está permitida por la especificación; llamar a import() lanzará una excepción.

Los service workers solo se pueden registrar en el ámbito Window en algunos o todos los navegadores, ya que el objeto ServiceWorker no está expuesto en DedicatedWorkerGlobalScope ni en SharedWorkerGlobalScope. Consulta la compatibilidad con navegadores para más información.

EventTarget ServiceWorker

Propiedades de instancia

La interfaz ServiceWorker hereda propiedades de su padre, EventTarget.

ServiceWorker.scriptURL Read only

Devuelve la URL del script serializado del ServiceWorker definido como parte de ServiceWorkerRegistration. La URL debe tener el mismo origen que el documento que registra el ServiceWorker.

ServiceWorker.state Read only

Devuelve el estado del service worker. Retorna uno de los siguientes valores: parsed, installing, installed, activating, activated, o redundant.

Métodos de instancia

La interfaz ServiceWorker hereda métodos de su padre, EventTarget.

ServiceWorker.postMessage()

Envía un mensaje — que consiste en cualquier objeto JavaScript clonable de forma estructurada — al service worker. El mensaje se transmite al service worker mediante un evento message en su ámbito global.

Eventos

statechange

Se dispara cuando ServiceWorker.state cambia.

error

Se dispara cuando ocurre un error dentro del objeto ServiceWorker.

Ejemplos

Este fragmento de código proviene del ejemplo de eventos de registro de service worker (demo en vivo). El código escucha cualquier cambio en ServiceWorker.state y devuelve su valor.

js
if ("serviceWorker" in navigator) {
  navigator.serviceWorker
    .register("service-worker.js", {
      scope: "./",
    })
    .then((registration) => {
      let serviceWorker;
      if (registration.installing) {
        serviceWorker = registration.installing;
        document.querySelector("#kind").textContent = "installing";
      } else if (registration.waiting) {
        serviceWorker = registration.waiting;
        document.querySelector("#kind").textContent = "waiting";
      } else if (registration.active) {
        serviceWorker = registration.active;
        document.querySelector("#kind").textContent = "active";
      }
      if (serviceWorker) {
        // logState(serviceWorker.state);
        serviceWorker.addEventListener("statechange", (e) => {
          // logState(e.target.state);
        });
      }
    })
    .catch((error) => {
      // Algo salió mal durante el registro. El archivo service-worker.js
      // podría no estar disponible o contener un error de sintaxis.
    });
} else {
  // El navegador actual no soporta service workers.
  // Quizás es demasiado antiguo o no estamos en un Contexto Seguro.
}

Especificaciones

Specification
Service Workers Nightly
# serviceworker-interface

Compatibilidad con navegadores

Véase también