chrome.alarms

Descrizione

Utilizza l'API chrome.alarms per pianificare l'esecuzione periodica del codice o in un momento specifico in futuro.

Autorizzazioni

alarms

Per utilizzare l'API chrome.alarms, dichiara l'autorizzazione "alarms" nel manifest:

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

Concetti e utilizzo

Per garantire un comportamento affidabile, è utile comprendere il funzionamento dell'API.

Sospensione del dispositivo

Le sveglie continuano a suonare mentre un dispositivo è in sospensione. Tuttavia, una sveglia non riattiva un dispositivo. Quando il dispositivo si riattiva, suonano tutte le sveglie perse. Le sveglie ripetute suoneranno al massimo una volta e verranno riprogrammate utilizzando il periodo specificato a partire dal momento in cui il dispositivo si riattiva, senza tenere conto del tempo trascorso da quando la sveglia è stata impostata per la prima volta.

Persistenza

Puoi controllare la persistenza di una sveglia al momento della creazione utilizzando il persistAcrossSessions flag. Può essere impostato su true (persiste fino all'aggiornamento dell'estensione) o false (viene cancellato se l'estensione viene ricaricata o il browser viene riavviato e ogni volta che l'estensione viene aggiornata).

Altri browser e versioni precedenti di Chrome

Questa proprietà non è supportata in altri browser (problema) o nelle versioni di Chrome precedenti a Chrome 150, dove il comportamento può essere imprevedibile. Di conseguenza, è consigliabile assicurarsi che le sveglie importanti esistano ogni volta che viene avviato il service worker. Ad esempio:

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

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

checkAlarmState();

Se la sveglia viene creata dinamicamente in base all'azione dell'utente, potresti voler memorizzare che è stata creata una sveglia altrove in modo da sapere di ricrearla, se necessario.

Esempi

Gli esempi seguenti mostrano come utilizzare una sveglia e rispondere. Per provare questa API, installa l'esempio dell'API Alarm dal repository chrome-extension-samples.

Imposta una sveglia

L'esempio seguente imposta una sveglia nel service worker quando viene installata una nuova versione dell'estensione:

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
  });
});

Rispondi a una sveglia

L'esempio seguente imposta l'icona della barra degli strumenti delle azioni in base al nome della sveglia che è suonata.

service-worker.js:

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

Tipi

Alarm

Proprietà

  • nome

    stringa

    Il nome di questa sveglia.

  • periodInMinutes

    numero facoltativo

    Se non è null, la sveglia è ripetuta e suonerà di nuovo dopo periodInMinutes minuti.

  • persistAcrossSessions

    booleano

    Chrome 150+

    Indica se la sveglia deve persistere tra le sessioni (riavvii del browser).

  • scheduledTime

    numero

    L'ora in cui è stata programmata la sveglia, in millisecondi dopo l'epoca (ad es. Date.now() + n). Per motivi di prestazioni, la sveglia potrebbe essere stata ritardata di un importo arbitrario oltre questo.

AlarmCreateInfo

Proprietà

  • delayInMinutes

    numero facoltativo

    Il periodo di tempo in minuti dopo il quale deve essere attivato l'evento onAlarm.

  • nome

    stringa facoltativa

    In attesa

    Il nome di questa sveglia.

  • periodInMinutes

    numero facoltativo

    Se impostato, l'evento onAlarm deve essere attivato ogni periodInMinutes minuti dopo l'evento iniziale specificato da when o delayInMinutes. Se non è impostato, la sveglia suonerà una sola volta.

  • persistAcrossSessions

    booleano facoltativo

    Chrome 150+

    Indica se la sveglia deve persistere tra le sessioni (riavvii del browser). In Chrome, il valore predefinito è true per corrispondere al comportamento storico, ma devi impostarlo in modo esplicito per massimizzare la compatibilità tra i browser.

  • quando

    numero facoltativo

    L'ora in cui deve suonare la sveglia, in millisecondi dopo l'epoca (ad es. Date.now() + n).

Metodi

clear()

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

Cancella la sveglia con il nome specificato.

Parametri

  • nome

    stringa facoltativa

    Il nome della sveglia da cancellare. Il valore predefinito è la stringa vuota.

Resi

  • Promise<boolean>

    Chrome 91+

clearAll()

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

Cancella tutte le sveglie.

Resi

  • Promise<boolean>

    Chrome 91+

create()

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

Crea una sveglia. All'ora o alle ore specificate da alarmInfo, viene attivato l'evento onAlarm. Se esiste un'altra sveglia con lo stesso nome (o senza nome se non ne è stato specificato uno), verrà annullata e sostituita da questa sveglia.

Per ridurre il carico sul computer dell'utente, Chrome limita le sveglie a una volta ogni 30 secondi, ma potrebbe ritardarle di un importo arbitrario. Ciò significa che l'impostazione di delayInMinutes o periodInMinutes su un valore inferiore a 0.5 non verrà rispettata e genererà un avviso. when può essere impostato su un valore inferiore a 30 secondi dopo "ora" senza avviso, ma in realtà la sveglia non suonerà per almeno 30 secondi.

Per aiutarti a eseguire il debug dell'app o dell'estensione, quando l'hai caricata non pacchettizzata, non esiste un limite alla frequenza con cui la sveglia può attivarsi.

Parametri

  • nome

    stringa facoltativa

    Nome facoltativo per identificare questa sveglia. Il valore predefinito è la stringa vuota.

  • alarmInfo

    Descrive quando deve suonare la sveglia. L'ora iniziale deve essere specificata da when o delayInMinutes (ma non da entrambi). Se periodInMinutes è impostato, la sveglia si ripeterà ogni periodInMinutes minuti dopo l'evento iniziale. Se non è impostato né whendelayInMinutes per una sveglia ripetuta, periodInMinutes viene utilizzato come valore predefinito per delayInMinutes.

Resi

  • Promise<void>

    Chrome 111+

    Promessa che viene risolta quando la sveglia è stata creata.

get()

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

Recupera i dettagli della sveglia specificata.

Parametri

  • nome

    stringa facoltativa

    Il nome della sveglia da ottenere. Il valore predefinito è la stringa vuota.

Resi

  • Promise<Alarm | undefined>

    Chrome 91+

getAll()

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

Recupera un array di tutte le sveglie.

Resi

  • Promise<Alarm[]>

    Chrome 91+

Eventi

onAlarm

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

Viene attivato quando è trascorso il tempo di una sveglia. Utile per le pagine degli eventi.

Parametri

  • callback

    funzione

    Il parametro callback ha il seguente aspetto:

    (alarm: Alarm) => void