Descrizione
Utilizza l'API chrome.alarms
per pianificare l'esecuzione del codice periodicamente 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 comportamento dell'API.
Sospensione del dispositivo
Le sveglie continuano a funzionare mentre un dispositivo è in modalità Sospensione. Tuttavia, una sveglia non risveglierà un dispositivo. Quando il dispositivo si riattiva, vengono attivate le sveglie perse. Le sveglie ripetute vengono attivate al massimo una volta e poi vengono riprogrammate utilizzando il periodo specificato a partire dall'accensione del dispositivo, senza tenere conto del tempo già trascorso dall'attivazione originale della sveglia.
Persistenza
In genere, gli allarmi rimangono attivi fino all'aggiornamento di un'estensione. Tuttavia, non è garantito e le sveglie potrebbero essere cancellate al riavvio del browser. Di conseguenza, ti consigliamo di impostare un valore nello spazio di archiviazione quando viene creato un avviso e di assicurarti che esista ogni volta che viene avviato il tuo worker di servizio. Ad esempio:
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();
Esempi
Gli esempi riportati di seguito mostrano come utilizzare e rispondere a una sveglia. Per provare questa API, installa l'esempio di API Alarm dal repository chrome-extension-samples.
Imposta una sveglia
L'esempio seguente imposta una sveglia nel service worker quando l'estensione è installata:
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
});
});
Rispondere a un allarme
L'esempio seguente imposta l'icona della barra degli strumenti delle azioni in base al nome dell'allarme che si è attivato.
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
number facoltativo
Se non è nullo, la sveglia è ripetuta e verrà attivata di nuovo tra
periodInMinutes
minuti. -
scheduledTime
numero
Ora in cui è stato pianificato l'avvio di questo avviso, in millisecondi dopo l'epoca (ad es.
Date.now() + n
). Per motivi di prestazioni, l'avviso potrebbe essere stato ritardato di un periodo arbitrario oltre questo.
AlarmCreateInfo
Proprietà
-
delayInMinutes
number facoltativo
Periodo di tempo in minuti dopo il quale deve essere attivato l'evento
onAlarm
. -
periodInMinutes
number facoltativo
Se impostato, l'evento onAlarm deve essere attivato ogni
periodInMinutes
minuti dopo l'evento iniziale specificato dawhen
odelayInMinutes
. Se non è impostato, l'allarme verrà attivato una sola volta. -
quando
number facoltativo
Ora in cui deve essere attivata l'allerta, in millisecondi dopo l'epoca (ad es.
Date.now() + n
).
Metodi
clear()
chrome.alarms.clear(
name?: string,
callback?: function,
)
Cancella la sveglia con il nome specificato.
Parametri
-
nome
stringa facoltativa
Il nome della sveglia da cancellare. Il valore predefinito è la stringa vuota.
-
callback
function facoltativa
Il parametro
callback
ha il seguente aspetto:(wasCleared: boolean) => void
-
wasCleared
booleano
-
Resi
-
Promise<boolean>
Chrome 91 e versioni successiveLe promesse sono supportate in Manifest V3 e versioni successive, ma i callback vengono forniti per la compatibilità con le versioni precedenti. Non puoi utilizzarli entrambi nella stessa chiamata di funzione. La promessa viene risolta con lo stesso tipo passato al callback.
clearAll()
chrome.alarms.clearAll(
callback?: function,
)
Cancella tutte le sveglie.
Parametri
-
callback
function facoltativa
Il parametro
callback
ha il seguente aspetto:(wasCleared: boolean) => void
-
wasCleared
booleano
-
Resi
-
Promise<boolean>
Chrome 91 e versioni successiveLe promesse sono supportate in Manifest V3 e versioni successive, ma i callback vengono forniti per la compatibilità con le versioni precedenti. Non puoi utilizzarli entrambi nella stessa chiamata di funzione. La promessa viene risolta con lo stesso tipo passato al callback.
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
callback?: function,
)
Crea una sveglia. Vicino 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 nessuno), verrà annullata e sostituita da questa sveglia.
Per ridurre il carico sulla macchina dell'utente, Chrome limita le sveglie a un massimo di una ogni 30 secondi, ma può ritardarle per un periodo di tempo arbitrario. In altre parole, l'impostazione di delayInMinutes
o periodInMinutes
su un valore inferiore a 0.5
non verrà rispettata e verrà visualizzato un avviso. when
può essere impostato su meno di 30 secondi dopo "ora" senza avviso, ma non attiverà effettivamente la sveglia per almeno 30 secondi.
Per aiutarti a eseguire il debug dell'app o dell'estensione, una volta caricata non esiste alcun limite alla frequenza con cui può essere attivata la sveglia.
Parametri
-
nome
stringa facoltativa
Nome facoltativo per identificare questa sveglia. Il valore predefinito è la stringa vuota.
-
alarmInfo
Descrive quando deve essere attivata l'allerta. L'ora iniziale deve essere specificata tramite
when
odelayInMinutes
(ma non entrambi). Se è impostatoperiodInMinutes
, la sveglia si ripeterà ogniperiodInMinutes
minuti dopo l'evento iniziale. Se néwhen
nédelayInMinutes
sono impostati per una sveglia ripetuta,periodInMinutes
viene utilizzato come valore predefinito perdelayInMinutes
. -
callback
function facoltativa
Chrome 111 e versioni successiveIl parametro
callback
ha il seguente aspetto:() => void
Resi
-
Promise<void>
Chrome 111 e versioni successiveLe promesse sono supportate in Manifest V3 e versioni successive, ma i callback vengono forniti per la compatibilità con le versioni precedenti. Non puoi utilizzarli entrambi nella stessa chiamata di funzione. La promessa viene risolta con lo stesso tipo passato al callback.
get()
chrome.alarms.get(
name?: string,
callback?: function,
)
Recupera i dettagli della sveglia specificata.
Parametri
Resi
-
Promise<Alarm | undefined>
Chrome 91 e versioni successiveLe promesse sono supportate in Manifest V3 e versioni successive, ma i callback vengono forniti per la compatibilità con le versioni precedenti. Non puoi utilizzarli entrambi nella stessa chiamata di funzione. La promessa viene risolta con lo stesso tipo passato al callback.
getAll()
chrome.alarms.getAll(
callback?: function,
)
Restituisce un array di tutte le sveglie.
Parametri
Resi
-
Promise<Alarm[]>
Chrome 91 e versioni successiveLe promesse sono supportate in Manifest V3 e versioni successive, ma i callback vengono forniti per la compatibilità con le versioni precedenti. Non puoi utilizzarli entrambi nella stessa chiamata di funzione. La promessa viene risolta con lo stesso tipo passato al callback.