Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.
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.
La interfazServiceWorkerContainer de laAPI Service Worker proporciona un objeto que representa alservice worker como una unidad general en el ecosistema de la red, incluidas las facilidades para registrar, cancelar y actualizar losservice worker, y acceder al estado de losservice worker y sus altas.
Lo que es más importante, expone el métodoServiceWorkerContainer.register() que se usa para registrar losservice worker y la propiedadServiceWorkerContainer.controller que se usa para determinar si la página actual se controla activamente o no.
In this article
Propiedades de instancia
ServiceWorkerContainer.controllerRead onlyDevuelve un objeto
ServiceWorkersi su estado esactivatingoactivated(el mismo objeto devuelto porServiceWorkerRegistration.active). Esta propiedad devuelvenulldurante una solicitud de actualización forzada (Shift + actualizar) o si no hay ningúnworker activo.ServiceWorkerContainer.readyRead onlyProporciona una forma de retrasar la ejecución del código hasta que unservice worker esté activo. Devuelve un
Promiseque nunca se rechazará y que espera indefinidamente hasta que elServiceWorkerRegistrationasociado con la página actual tenga unServiceWorkerRegistration.active. Una vez que se cumple esa condición, se resuelve conServiceWorkerRegistration.
Eventos
controllerchangeOcurre cuando el
ServiceWorkerRegistrationasociado del documento adquiere un nuevoactiveworker.errorObsoletoNo estándarSe activa cada vez que se produce un error en losservice worker asociados.
messageOcurre cuando el objeto
ServiceWorkerContainerrecibe los mensajes entrantes (por ejemplo, a través de una llamadaMessagePort.postMessage()).
Métodos de instancia
ServiceWorkerContainer.register()Crea o actualiza un
ServiceWorkerRegistrationpara elscriptURLdado.ServiceWorkerContainer.getRegistration()Obtiene un objeto
ServiceWorkerRegistrationcuyo alcance coincide con la URL del documento proporcionado. El método devuelve unPromiseque se resuelve enServiceWorkerRegistrationoundefined.ServiceWorkerContainer.getRegistrations()Devuelve todos los objetos
ServiceWorkerRegistrationasociados con unServiceWorkerContaineren una matriz. El método devuelve unPromiseque se resuelve en una matriz deServiceWorkerRegistration.ServiceWorkerContainer.startMessages()Inicia explícitamente el flujo de mensajes que se envían desde unservice 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 conservice worker. Si se admite, el código registra elservice 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 elservice worker pueda tomar el control. El código también informa de cualquier error de registro.
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 Nightly> # serviceworkercontainer-interface> |