Descrizione
Utilizza l'API chrome.alarms per pianificare l'esecuzione del codice periodicamente o in un momento specifico nel futuro.
Autorizzazioni
alarmsPer utilizzare l'API browser.alarms, dichiara l'autorizzazione "alarms" nel manifest:
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
Concetti e utilizzo
Per garantire un comportamento affidabile, è utile capire come si comporta l'API.
Sospensione del dispositivo
Le sveglie continuano a funzionare mentre un dispositivo è in modalità di sospensione. Tuttavia, una sveglia non attiverà un dispositivo. Quando il dispositivo si riattiva, verranno attivati tutti gli allarmi non attivati. Le sveglie ripetute verranno attivate al massimo una volta e poi verranno riprogrammate utilizzando il periodo specificato a partire dal momento in cui il dispositivo si riattiva, senza tenere conto del tempo già trascorso da quando la sveglia è stata impostata per l'esecuzione.
Persistenza
Puoi controllare la persistenza di un allarme al momento della creazione utilizzando il flag persistAcrossSessions. Può essere impostato su true (persiste fino all'aggiornamento dell'estensione) o false (viene cancellato se l'estensione viene ricaricata o il browser si riavvia 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, è meglio assicurarsi che gli allarmi importanti esistano ogni volta che il service worker viene avviato. Ad esempio:
async function checkAlarmState() {
const alarm = await browser.alarms.get("my-alarm");
if (!alarm) {
await browser.alarms.create("my-alarm", { periodInMinutes: 1 });
}
}
checkAlarmState();
Se la sveglia viene creata in modo dinamico in base all'azione dell'utente, ti consigliamo di memorizzare la creazione della sveglia altrove, in modo da sapere se ricrearla, se necessario.
Esempi
I seguenti esempi mostrano come utilizzare e rispondere a un allarme. Per provare questa API, installa l'esempio di API Alarm dal repository chrome-extension-samples.
Imposta una sveglia
L'esempio seguente imposta un'allarme nel service worker quando viene installata una nuova versione dell'estensione:
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
});
});
Rispondi a un allarme
L'esempio seguente imposta l'icona della barra degli strumenti delle azioni in base al nome della sveglia che è scattata.
service-worker.js:
browser.alarms.onAlarm.addListener((alarm) => {
browser.action.setIcon({
path: getIconPath(alarm.name),
});
});
Tipi
Alarm
Proprietà
-
nome
stringa
Il nome di questa sveglia.
-
periodInMinutes
number optional
Se non è null, la sveglia è una sveglia ripetuta e suonerà di nuovo tra
periodInMinutesminuti. -
persistAcrossSessions
booleano
Chrome 150+Indica se la sveglia deve essere mantenuta tra le sessioni (riavvii del browser).
-
scheduledTime
numero
Ora in cui è stata pianificata l'attivazione di questa sveglia, in millisecondi trascorsi dall'epoca (ad es.
Date.now() + n). Per motivi di prestazioni, la sveglia potrebbe essere stata ritardata di un periodo di tempo arbitrario oltre questo limite.
AlarmCreateInfo
Proprietà
-
delayInMinutes
number optional
Il periodo di tempo in minuti dopo il quale deve essere attivato l'evento
onAlarm. -
nome
stringa facoltativa
Chrome 152+Il nome di questa sveglia.
-
periodInMinutes
number optional
Se impostato, l'evento onAlarm dovrebbe attivarsi ogni
periodInMinutesminuti dopo l'evento iniziale specificato dawhenodelayInMinutes. Se non viene impostato, l'allarme verrà attivato una sola volta. -
persistAcrossSessions
boolean facoltativo
Chrome 150+Indica se la sveglia deve essere mantenuta tra le sessioni (riavvii del browser). In Chrome, il valore predefinito è true per corrispondere al comportamento storico, ma devi impostarlo esplicitamente per massimizzare la compatibilità tra i browser.
-
quando
number optional
L'ora in cui deve suonare la sveglia, in millisecondi trascorsi dall'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 e versioni successive
clearAll()
chrome.alarms.clearAll(): Promise<boolean | undefined>
Cancella tutte le sveglie.
Resi
-
Promise<boolean | undefined>
Chrome 91 e versioni successive
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
): Promise<void>
Crea una sveglia. In prossimità dell'orario o degli orari specificati 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 gli avvisi a un massimo di una volta al secondo, ma potrebbe ritardarli di un periodo di tempo arbitrario. Ciò significa che l'impostazione di delayInMinutes o periodInMinutes su un valore inferiore a 1 secondo non verrà rispettata e genererà un avviso. when può essere impostato su meno di 1 secondo dopo "now" senza avviso, ma non attiverà l'allarme per almeno 1 secondo.
Parametri
-
nome
stringa facoltativa
Nome facoltativo per identificare questa sveglia. Il valore predefinito è la stringa vuota.
-
alarmInfo
Descrive quando deve attivarsi la sveglia. L'ora iniziale deve essere specificata da
whenodelayInMinutes(ma non da entrambi). Se è impostatoperiodInMinutes, l'allarme verrà ripetuto ogniperiodInMinutesminuti dopo l'evento iniziale. Se non viene impostato néwhennédelayInMinutesper una sveglia ripetuta, viene utilizzatoperiodInMinutescome valore predefinito perdelayInMinutes.
Resi
-
Promise<void>
Chrome 111 e versioni successivePromise che si risolve quando la sveglia è stata creata.
get()
chrome.alarms.get(
name?: string,
): Promise<Alarm | undefined>
Recupera i dettagli dell'allarme specificato.
Parametri
-
nome
stringa facoltativa
Il nome dell'allarme da ottenere. Il valore predefinito è la stringa vuota.
Resi
-
Promise<Alarm | undefined>
Chrome 91 e versioni successive
Resi
-
Promise<Alarm[]>
Chrome 91 e versioni successive