browser.alarms

Description

Utilisez l'API chrome.alarms pour planifier l'exécution du code de manière périodique ou à un moment précis dans le futur.

Autorisations

alarms

Pour utiliser l'API browser.alarms, déclarez l'autorisation "alarms" dans le fichier manifeste :

{
  "name": "My extension",
  ...
  "permissions": [
    "alarms"
  ],
  ...
}

Concepts et utilisation

Pour garantir un comportement fiable, il est utile de comprendre le fonctionnement de l'API.

Veille de l'appareil

Les alarmes continuent de s'exécuter lorsque l'appareil est en veille. Toutefois, une alarme ne réveillera pas un appareil. Lorsque l'appareil se réveille, toutes les alarmes manquées se déclenchent. Les alarmes répétitives se déclenchent au maximum une fois, puis sont reprogrammées en fonction de la période spécifiée à partir du moment où l'appareil se réactive, sans tenir compte du temps déjà écoulé depuis la configuration initiale de l'alarme.

Persistance

Vous pouvez contrôler la persistance d'une alarme au moment de sa création à l'aide de l'option persistAcrossSessions. Vous pouvez définir cette option sur true (persiste jusqu'à la mise à jour de l'extension) ou false (effacé si l'extension est actualisée ou si le navigateur redémarre, et chaque fois que l'extension est mise à jour).

Autres navigateurs et versions antérieures de Chrome

Cette propriété n'est pas compatible avec les autres navigateurs (problème) ni avec les versions de Chrome antérieures à Chrome 150, où le comportement peut être imprévisible. Par conséquent, il est préférable de s'assurer que les alarmes importantes existent chaque fois que votre service worker démarre. Exemple :

async function checkAlarmState() {
  const alarm = await browser.alarms.get("my-alarm");

  if (!alarm) {
    await browser.alarms.create("my-alarm", { periodInMinutes: 1 });
  }
}

checkAlarmState();

Si votre alarme est créée de manière dynamique en fonction d'une action de l'utilisateur, vous pouvez stocker le fait qu'une alarme a été créée ailleurs afin de savoir si vous devez la recréer si nécessaire.

Exemples

Les exemples suivants montrent comment utiliser une alarme et y répondre. Pour essayer cette API, installez l'exemple d'API Alarm à partir du dépôt chrome-extension-samples.

Régler une alarme

L'exemple suivant définit une alarme dans le service worker lorsqu'une nouvelle version de l'extension est installée :

service-worker.js :

browser.runtime.onInstalled.addListener(async ({ reason }) => {
  // Create an alarm so we have something to look at in the demo
  await browser.alarms.create('demo-default-alarm', {
    delayInMinutes: 1,
    periodInMinutes: 1,
    persistAcrossSessions: true
  });
});

Répondre à une alarme

L'exemple suivant définit l'icône de la barre d'outils d'action en fonction du nom de l'alarme qui s'est déclenchée.

service-worker.js :

browser.alarms.onAlarm.addListener((alarm) => {
  browser.action.setIcon({
    path: getIconPath(alarm.name),
  });
});

Types

Alarm

Propriétés

  • nom

    chaîne

    Nom de cette alarme.

  • periodInMinutes

    number facultatif

    Si la valeur n'est pas nulle, l'alarme est récurrente et se déclenchera à nouveau dans periodInMinutes minutes.

  • persistAcrossSessions

    booléen

    Chrome 150+

    Indique si l'alarme doit persister d'une session à l'autre (redémarrages du navigateur).

  • scheduledTime

    nombre

    Heure à laquelle cette alarme devait se déclencher, en millisecondes depuis l'epoch (par exemple, Date.now() + n). Pour des raisons de performances, l'alarme peut avoir été retardée d'une durée arbitraire au-delà de cette valeur.

AlarmCreateInfo

Propriétés

  • delayInMinutes

    number facultatif

    Durée en minutes après laquelle l'événement onAlarm doit se déclencher.

  • nom

    chaîne facultatif

    Chrome 152 ou version ultérieure

    Nom de cette alarme.

  • periodInMinutes

    number facultatif

    Si cette option est définie, l'événement onAlarm doit se déclencher toutes les periodInMinutes minutes après l'événement initial spécifié par when ou delayInMinutes. Si ce champ n'est pas défini, l'alarme ne se déclenchera qu'une seule fois.

  • persistAcrossSessions

    boolean facultatif

    Chrome 150+

    Indique si l'alarme doit persister d'une session à l'autre (redémarrages du navigateur). Dans Chrome, la valeur par défaut est "true" pour correspondre au comportement historique, mais vous devez la définir explicitement pour maximiser la compatibilité entre les navigateurs.

  • when

    number facultatif

    Heure à laquelle l'alarme doit se déclencher, en millisecondes depuis l'epoch (par exemple, Date.now() + n).

Méthodes

clear()

chrome.alarms.clear(
  name?: string,
)
: Promise<boolean>

Efface l'alarme portant le nom indiqué.

Paramètres

  • nom

    chaîne facultatif

    Nom de l'alarme à effacer. La valeur par défaut est une chaîne vide.

Renvoie

  • Promise<boolean>

    Chrome 91 ou version ultérieure

clearAll()

chrome.alarms.clearAll(): Promise<boolean | undefined>

Efface toutes les alarmes.

Renvoie

  • Promise<boolean | undefined>

    Chrome 91 ou version ultérieure

create()

chrome.alarms.create(
  name?: string,
  alarmInfo: AlarmCreateInfo,
)
: Promise<void>

Crée une alarme. L'événement onAlarm est déclenché à l'heure ou aux heures spécifiées par alarmInfo. S'il existe une autre alarme portant le même nom (ou sans nom si aucun n'est spécifié), elle sera annulée et remplacée par cette alarme.

Afin de réduire la charge sur l'ordinateur de l'utilisateur, Chrome limite les alarmes à une fois par seconde au maximum, mais peut les retarder d'un montant arbitraire. En d'autres termes, si vous définissez delayInMinutes ou periodInMinutes sur une valeur inférieure à une seconde, elle ne sera pas prise en compte et un avertissement sera généré. when peut être défini sur moins d'une seconde après "maintenant" sans avertissement, mais l'alarme ne se déclenchera pas avant au moins une seconde.

Paramètres

  • nom

    chaîne facultatif

    Nom facultatif permettant d'identifier cette alarme. La valeur par défaut est une chaîne vide.

  • alarmInfo

    Décrit quand l'alarme doit se déclencher. L'heure initiale doit être spécifiée par when ou delayInMinutes (mais pas les deux). Si periodInMinutes est défini, l'alarme se répète toutes les periodInMinutes minutes après l'événement initial. Si ni when, ni delayInMinutes ne sont définis pour une alarme récurrente, periodInMinutes est utilisé par défaut pour delayInMinutes.

Renvoie

  • Promise<void>

    Chrome 111 ou version ultérieure

    Promesse qui se résout lorsque l'alarme a été créée.

get()

chrome.alarms.get(
  name?: string,
)
: Promise<Alarm | undefined>

Récupère les détails de l'alarme spécifiée.

Paramètres

  • nom

    chaîne facultatif

    Nom de l'alarme à obtenir. La valeur par défaut est une chaîne vide.

Renvoie

  • Promise<Alarm | undefined>

    Chrome 91 ou version ultérieure

getAll()

chrome.alarms.getAll(): Promise<Alarm[]>

Récupère un tableau de toutes les alarmes.

Renvoie

  • Promise<Alarm[]>

    Chrome 91 ou version ultérieure

Événements

onAlarm

chrome.alarms.onAlarm.addListener(
  callback: function,
)

Se déclenche lorsqu'une alarme est écoulée. Utile pour les pages d'événements.

Paramètres

  • callback

    fonction

    Le paramètre callback se présente comme suit :

    (alarm: Alarm) => void