Descripción
Usa la API de chrome.alarms para programar la ejecución de código de forma periódica o en un momento específico en el futuro.
Permisos
alarmsPara usar la API de chrome.alarms, declara el permiso "alarms" en el manifiesto:
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
Conceptos y uso
Para garantizar un comportamiento confiable, es útil comprender cómo se comporta la API.
Suspensión del dispositivo
Las alarmas siguen ejecutándose mientras un dispositivo está en suspensión. Sin embargo, una alarma no activará un dispositivo. Cuando el dispositivo se active, se activarán todas las alarmas perdidas. Las alarmas repetidas se activarán como máximo una vez y, luego, se reprogramarán con el período especificado a partir de cuando se active el dispositivo, sin tener en cuenta el tiempo que ya transcurrió desde que se configuró originalmente la alarma para que se ejecutara.
Persistencia
Puedes controlar la persistencia de una alarma en el momento de la creación con la persistAcrossSessions marca. Se puede establecer en true (persiste hasta que se actualiza la extensión) o false (se borra si se vuelve a cargar la extensión o se reinicia el navegador, y cada vez que se actualiza la extensión).
Otros navegadores y versiones anteriores de Chrome
Esta propiedad no es compatible con otros navegadores (problema) ni con versiones de Chrome anteriores a Chrome 150, en las que el comportamiento puede ser impredecible. Por lo tanto, es mejor asegurarse de que existan alarmas importantes cada vez que se inicie tu service worker. Por ejemplo:
async function checkAlarmState() {
const alarm = await chrome.alarms.get("my-alarm");
if (!alarm) {
await chrome.alarms.create("my-alarm", { periodInMinutes: 1 });
}
}
checkAlarmState();
Si tu alarma se crea de forma dinámica en función de la acción del usuario, es posible que desees almacenar que se creó una alarma en otro lugar para saber cómo volver a crearla si es necesario.
Ejemplos
En los siguientes ejemplos, se muestra cómo usar una alarma y responder a ella. Para probar esta API, instala el ejemplo de la API de Alarm del repositorio chrome-extension-samples.
Cómo establecer una alarma
En el siguiente ejemplo, se establece una alarma en el service worker cuando se instala una versión nueva de la extensión:
service-worker.js:
chrome.runtime.onInstalled.addListener(async ({ reason }) => {
// Create an alarm so we have something to look at in the demo
await chrome.alarms.create('demo-default-alarm', {
delayInMinutes: 1,
periodInMinutes: 1,
persistAcrossSessions: true
});
});
Cómo responder a una alarma
En el siguiente ejemplo, se establece el ícono de la barra de herramientas de acción según el nombre de la alarma que se activó.
service-worker.js:
chrome.alarms.onAlarm.addListener((alarm) => {
chrome.action.setIcon({
path: getIconPath(alarm.name),
});
});
Tipos
Alarm
Propiedades
-
nombre
string
Nombre de esta alarma.
-
periodInMinutes
número opcional
Si no es nulo, la alarma es una alarma repetida y se activará de nuevo en
periodInMinutesminutos. -
persistAcrossSessions
booleano
Chrome 150+Indica si la alarma debe persistir en las sesiones (reinicios del navegador).
-
scheduledTime
número
Hora en la que se programó la activación de esta alarma, en milisegundos después de la época (p.ej.,
Date.now() + n). Por motivos de rendimiento, es posible que la alarma se haya retrasado una cantidad arbitraria más allá de esto.
AlarmCreateInfo
Propiedades
-
delayInMinutes
número opcional
Período en minutos después del cual se debe activar el evento
onAlarm. -
periodInMinutes
número opcional
Si se configura, el evento onAlarm debe activarse cada
periodInMinutesminutos después del evento inicial especificado porwhenodelayInMinutes. Si no se configura, la alarma solo se activará una vez. -
persistAcrossSessions
booleano opcional
Chrome 150+Indica si la alarma debe persistir en las sesiones (reinicios del navegador). En Chrome, el valor predeterminado es true para que coincida con el comportamiento histórico, pero debes configurarlo de forma explícita para maximizar la compatibilidad en todos los navegadores.
-
cuándo
número opcional
Hora en la que se debe activar la alarma, en milisegundos después de la época (p.ej.,
Date.now() + n).
Métodos
clear()
chrome.alarms.clear(
name?: string,
): Promise<boolean>
Borra la alarma con el nombre determinado.
Parámetros
-
nombre
string opcional
El nombre de la alarma que se debe borrar. El valor predeterminado es la cadena vacía.
Muestra
-
Promise<boolean>
Chrome 91+
clearAll()
chrome.alarms.clearAll(): Promise<boolean>
Borra todas las alarmas.
Muestra
-
Promise<boolean>
Chrome 91+
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
): Promise<void>
Crea una alarma. Cerca de la hora especificada por alarmInfo, se activa el evento onAlarm. Si hay otra alarma con el mismo nombre (o sin nombre si no se especifica ninguna), se cancelará y se reemplazará por esta alarma.
Para reducir la carga en la máquina del usuario, Chrome limita las alarmas a una vez cada 30 segundos como máximo, pero puede retrasarlas una cantidad arbitraria más. Es decir, si se establece delayInMinutes o periodInMinutes en menos de 0.5, no se respetará y se mostrará una advertencia. when se puede establecer en menos de 30 segundos después de "ahora" sin advertencia, pero no hará que la alarma se active durante al menos 30 segundos.
Para ayudarte a depurar tu app o extensión, cuando la cargues sin empaquetar, no habrá límite en la frecuencia con la que se pueda activar la alarma.
Parámetros
-
nombre
string opcional
Nombre opcional para identificar esta alarma. El valor predeterminado es la cadena vacía.
-
alarmInfo
Indica cuándo se debe activar la alarma. La hora inicial se debe especificar con
whenodelayInMinutes(pero no con ambos). Si se estableceperiodInMinutes, la alarma se repetirá cadaperiodInMinutesminutos después del evento inicial. Si no se establecewhennidelayInMinutespara una alarma repetida,periodInMinutesse usa como valor predeterminado paradelayInMinutes.
Muestra
-
Promise<void>
Chrome 111+Promesa que se resuelve cuando se crea la alarma.
get()
chrome.alarms.get(
name?: string,
): Promise<Alarm | undefined>
Recupera los detalles de la alarma especificada.
Parámetros
-
nombre
string opcional
El nombre de la alarma que se debe obtener. El valor predeterminado es la cadena vacía.
Muestra
-
Promise<Alarm | undefined>
Chrome 91+
Muestra
-
Promise<Alarm[]>
Chrome 91+