0Pricing
HTML Academy · Lección

Registro de un service worker desde HTML

Registre un service worker con una etiqueta script y la API navigator

Registro de un service worker desde HTML es una lección gratuita de HTML Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de HTML Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de HTML Academy incluye 4 lecciones en total.

Qué es un service worker

Un service worker es un archivo JavaScript que se ejecuta en segundo plano, separado de cualquier página, e intercepta las solicitudes de red correspondientes a su ámbito. Permite ofrecer compatibilidad sin conexión, notificaciones push, sincronización en segundo plano y cargas repetidas más rápidas mediante la caché.

Registro

Registre el worker desde un script de la página: navigator.serviceWorker.register("/sw.js"). El navegador descarga /sw.js, lo analiza, ejecuta su evento install y comienza a interceptar las solicitudes correspondientes al ámbito del registro.

if ("serviceWorker" in navigator) {
  navigator.serviceWorker.register("/sw.js")
    .then((reg) => console.log("Registered, scope:", reg.scope))
    .catch((err) => console.error("Registration failed:", err));
}

Detecte primero la compatibilidad

Los navegadores antiguos no admiten service workers. Detecte siempre la funcionalidad con "serviceWorker" in navigator antes de llamar a register; de lo contrario, la llamada produce una excepción en los navegadores que no tienen esta API. No es viable usar un polyfill: los service workers no se pueden simular porque requieren integración a nivel del navegador.

Ámbito

El ámbito es el prefijo de ruta que controla el worker. De forma predeterminada, el ámbito es el directorio del archivo del worker: /sw.js controla todas las URL bajo /. Para registrar un worker con un ámbito más profundo desde una ubicación de archivo diferente, establezca la opción de ámbito y sirva también la cabecera Service-Worker-Allowed.

Dónde colocar sw.js

Coloque sw.js en la raíz de la aplicación (/sw.js) para que su ámbito predeterminado cubra todo el sitio. Las rutas más profundas, como /app/sw.js, limitan el ámbito a /app/ y sus subrutas, lo que rara vez es lo que necesita.

Momento del registro

Registre el worker después de que se haya cargado la página para evitar que compita por el ancho de banda durante el renderizado crítico: window.addEventListener("load", () => navigator.serviceWorker.register("/sw.js")). Las funciones de la PWA se activarán en las visitas posteriores sin retrasar la primera.

Actualizaciones

El navegador comprueba automáticamente si se ha actualizado sw.js, normalmente cada 24 horas y durante la mayoría de las cargas de página. Si el contenido del archivo ha cambiado, el nuevo worker se descarga, se instala y espera en el estado "waiting" hasta que se cierren todas las pestañas existentes; entonces se activa.

Forzar actualizaciones

registration.update() activa manualmente una comprobación de actualizaciones. self.skipWaiting(), dentro del nuevo sw.js, lo activa inmediatamente sin esperar a que se cierren las pestañas. Combine ambos para que siempre se ejecute el worker más reciente, a costa de volver a descargar recursos durante la sesión.

Anular el registro

registration.unregister() elimina el worker. Resulta útil durante el desarrollo si un worker defectuoso está provocando problemas en el sitio. En Chrome DevTools, Application → Service Workers ofrece un botón «Unregister» con la misma finalidad durante la depuración.

Error común

Registrar un worker mediante HTTP, sin HTTPS, falla silenciosamente: los service workers requieren un origen seguro, HTTPS o localhost durante el desarrollo. Si el registro no tiene efecto, compruebe en la consola el mensaje «An SSL certificate error occurred».

Coordinación entre el worker y la página

El worker no tiene acceso al DOM. Para enviar mensajes, use navigator.serviceWorker.controller.postMessage() desde la página y self.addEventListener("message", handler) en el worker, y viceversa. Esto resulta útil para invalidar la caché, comprobar versiones y gestionar eventos personalizados.

Primera visita frente a visitas posteriores

En la primera visita, el worker se instala y comienza a controlar las páginas únicamente después de que se vuelva a cargar la página. Para controlar inmediatamente la primera navegación, llame a self.clients.claim() en el evento activate; resulta útil para aplicaciones que priorizan el funcionamiento sin conexión.

Comprobación de conocimientos

¿Por qué los service workers deben servirse mediante HTTPS o localhost?

Resumen

Registre los service workers desde el JavaScript de la página con navigator.serviceWorker.register("/sw.js") después de detectar la funcionalidad. Coloque sw.js en la raíz de la aplicación para obtener un ámbito completo. Regístrelo durante la carga para evitar que compita con el renderizado crítico. Las actualizaciones se comprueban automáticamente de forma periódica; puede forzarlas con registration.update o skipWaiting. Se requiere HTTPS para evitar la inyección de workers maliciosos.

Preguntas frecuentes

¿La lección «Registro de un service worker desde HTML» es gratis?

Sí — el texto completo de «Registro de un service worker desde HTML» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de HTML Academy, actualiza a CoddyKit PRO. El curso de HTML Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Registro de un service worker desde HTML»?

Registre un service worker con una etiqueta script y la API navigator Practicas HTML Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar HTML Academy?

No se requiere experiencia previa. HTML Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Registro de un service worker desde HTML»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de HTML Academy?

Sí. Cada lección de HTML Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. El manifiesto de la aplicación web
  2. Registro de un service worker desde HTML
  3. Color del tema e iconos de la aplicación
  4. Página alternativa sin conexión
← Volver a HTML Academy