Sebastian Gomez
Uso de Alarmas en extensiones de Chrome
La API chrome.alarms de Chrome nos permite programar la ejecución de código en intervalos específicos. A continuación te explico cómo puedes usar esta API en tus proyectos paso a paso.
Por qué usamos alarmas en Manifest V3
Antes de tocar código, vale la pena entender por qué existe esta API. En Manifest V3 las extensiones ya no tienen una página de fondo persistente, sino un service worker que es efímero: el navegador lo termina cuando no hay nada que hacer y lo reactiva solo cuando ocurre un evento. Eso significa que un setTimeout o un setInterval no sobreviven, porque el service worker puede haberse apagado mucho antes de que el temporizador se dispare.
La API chrome.alarms resuelve justo ese problema: las alarmas las gestiona el propio navegador, así que persisten aunque el service worker se duerma y vuelven a despertarlo cuando llega el momento. Por eso es el mecanismo recomendado para agendar trabajo diferido o periódico en extensiones modernas.
Creación de alarmas
Para crear una alarma usamos el método chrome.alarms.create. Este método acepta parámetros como el nombre de la alarma y el intervalo de tiempo.
Veamos un ejemplo:
chrome.alarms.create('myAlarm', { delayInMinutes: 1, periodInMinutes: 1 });Aquí delayInMinutes indica cuánto esperar antes de la primera activación, y periodInMinutes con qué frecuencia repetirla después.
Nota sobre el intervalo mínimo: en extensiones publicadas, Chrome impone un intervalo mínimo de aproximadamente 1 minuto. Si configuras valores por debajo de ese límite, se ignoran silenciosamente en producción (solo funcionan al cargar la extensión sin empaquetar, durante el desarrollo). Por eso en el ejemplo usamos valores de 1 minuto: no intentes programar alarmas de pocos segundos esperando que se cumplan en una extensión real.
Configuración de permisos
Asegúrate de agregar el permiso necesario en el archivo manifest.json:
{
"permissions": ["alarms"]
}Escucha de alarmas
Para reaccionar a una alarma usamos el evento chrome.alarms.onAlarm.addListener:
chrome.alarms.onAlarm.addListener((alarm) => {
if (alarm.name === 'myAlarm') {
console.log('Alarma activada');
}
});Como puedes ver, recibimos el objeto alarm y comprobamos su name para saber cuál se disparó. Esto es útil cuando tienes varias alarmas y quieres ejecutar lógica distinta para cada una.
Resumen en 3 puntos
- En Manifest V3 el service worker es efímero, así que
setTimeoutysetIntervalno son fiables para trabajo diferido; usamoschrome.alarms, que gestiona el navegador. - Creamos alarmas con
chrome.alarms.createy reaccionamos a ellas conchrome.alarms.onAlarm.addListener, comprobandoalarm.namecuando tenemos varias. - Recuerda declarar el permiso
alarmsenmanifest.jsony respetar el intervalo mínimo de aproximadamente 1 minuto en extensiones publicadas.
Ejercicios propuestos
- Crea una extensión mínima que registre una alarma cada minuto y escriba un mensaje en la consola del service worker cada vez que se dispare.
- Añade una segunda alarma con un nombre distinto y usa
alarm.namedentro del listener para ejecutar una acción diferente según cuál se active. - Investiga
chrome.alarms.getAllychrome.alarms.clear, e implementa un botón que liste las alarmas activas y permita cancelarlas.
Espero que este post te haya dado una visión general de cómo puedes usar la API chrome.alarms para desarrollar extensiones útiles y creativas. Si tienes ideas o proyectos en mente, no dudes en compartirlos. Déjame un comentario si te sirvió, y recuerda que si te gustó también puedes compartirlo usando los links a las redes sociales aquí abajo. Eso es todo, espero que este post te sea de utilidad y lo puedas aplicar a algún proyecto que tengas en mente. Buena suerte.
Sebastian Gomez
Creador de contenido principalmente acerca de tecnología.