chrome.alarms

Description

Utilisez l'API chrome.alarms pour planifier l'exécution de code à intervalles réguliers ou à une heure spécifique dans le futur.

Autorisations

alarms

Pour utiliser l'API chrome.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 fonctionner lorsqu'un appareil est en veille. Toutefois, une alarme ne réveillera pas un appareil. Lorsque l'appareil se réactive, toutes les alarmes manquées se déclenchent. Les alarmes récurrentes se déclenchent au maximum une fois, puis sont reprogrammées en utilisant la période spécifiée à partir du moment où l'appareil se réveille, sans tenir compte du temps qui s'est déjà écoulé depuis que l'alarme a été initialement programmée.

Persistance

Les alarmes persistent généralement jusqu'à ce qu'une extension soit mise à jour. Toutefois, cela n'est pas garanti et les alarmes peuvent être effacées lorsque le navigateur est redémarré. Par conséquent, envisagez de définir une valeur dans le stockage lorsqu'une alarme est créée, puis assurez-vous qu'elle existe chaque fois que votre service worker démarre. Exemple :

const STORAGE_KEY = "user-preference-alarm-enabled";

async function checkAlarmState() {
  const { alarmEnabled } = await chrome.storage.get(STORAGE_KEY);

  if (alarmEnabled) {
    const alarm = await chrome.alarms.get("my-alarm");

    if (!alarm) {
      await chrome.alarms.create({ periodInMinutes: 1 });
    }
  }
}

checkAlarmState();

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 lorsque l'extension est installée :

service-worker.js :

chrome.runtime.onInstalled.addListener(async ({ reason }) => {
  if (reason !== 'install') {
    return;
  }

  // Create an alarm so we have something to look at in the demo
  await chrome.alarms.create('demo-default-alarm', {
    delayInMinutes: 1,
    periodInMinutes: 1
  });
});

Répondre à une alarme

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

service-worker.js :

chrome.alarms.onAlarm.addListener((alarm) => {
  chrome.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épétée et se déclenchera à nouveau dans periodInMinutes minutes.

  • scheduledTime

    Total

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

AlarmCreateInfo

Propriétés

  • delayInMinutes

    number facultatif

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

  • periodInMinutes

    number facultatif

    Si elle 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 elle n'est pas définie, l'alarme ne se déclenchera qu'une seule fois.

  • when

    number facultatif

    Heure à laquelle l'alarme doit se déclencher, en millisecondes depuis l'époque (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 facultative

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

Renvoie

  • Promise<boolean>

    Chrome 91 et versions ultérieures

clearAll()

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

Efface toutes les alarmes.

Renvoie

  • Promise<boolean>

    Chrome 91 et versions ultérieures

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 la machine de l'utilisateur, Chrome limite les alarmes à une fois toutes les 30 secondes au maximum, mais peut les retarder d'une durée arbitraire. En d'autres termes, si vous définissez delayInMinutes ou periodInMinutes sur une valeur inférieure à 0.5, cette valeur ne sera pas prise en compte et un avertissement s'affichera. when peut être défini sur une durée inférieure à 30 secondes après "maintenant" sans avertissement, mais l'alarme ne se déclenchera pas avant au moins 30 secondes.

Pour vous aider à déboguer votre application ou extension, lorsque vous l'avez chargée non compressée, il n'y a pas de limite à la fréquence de déclenchement de l'alarme.

Paramètres

  • nom

    chaîne facultative

    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 et versions ultérieures

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 facultative

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

Renvoie

  • Promise<Alarm | undefined>

    Chrome 91 et versions ultérieures

getAll()

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

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

Renvoie

  • Promise<Alarm[]>

    Chrome 91 et versions ultérieures

Événements

onAlarm

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

Déclenché lorsqu'une alarme a sonné. Utile pour les pages d'événements.

Paramètres

  • callback

    fonction

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

    (alarm: Alarm) => void