Beschreibung
Mit der chrome.alarms API können Sie Code so planen, dass er regelmäßig oder zu einem bestimmten Zeitpunkt in der Zukunft ausgeführt wird.
Berechtigungen
alarmsWenn Sie die chrome.alarms API verwenden möchten, deklarieren Sie die "alarms" Berechtigung im Manifest:
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
Konzepte und Verwendung
Um ein zuverlässiges Verhalten zu gewährleisten, ist es hilfreich zu verstehen, wie sich die API verhält.
Ruhemodus
Alarme werden auch dann ausgeführt, wenn sich ein Gerät im Ruhemodus befindet. Ein Alarm kann ein Gerät jedoch nicht aus dem Ruhemodus holen. Wenn das Gerät aufwacht, werden alle verpassten Alarme ausgelöst. Wiederholende Alarme werden höchstens einmal ausgelöst und dann mit dem angegebenen Zeitraum neu geplant. Dabei wird die Zeit ab dem Aufwachen des Geräts berücksichtigt und nicht die Zeit, die seit dem ursprünglichen Festlegen des Alarms vergangen ist.
Persistenz
Sie können die Persistenz eines Alarms bei der Erstellung mit dem persistAcrossSessions Flag steuern. Dieses Flag kann auf true (bleibt bis zur Aktualisierung der Erweiterung bestehen) oder false (wird gelöscht, wenn die Erweiterung neu geladen oder der Browser neu gestartet wird und immer dann, wenn die Erweiterung aktualisiert wird) gesetzt werden.
Andere Browser und frühere Chrome-Versionen
Diese Property wird in anderen Browsern (Problem) oder in Chrome-Versionen vor Chrome 150 nicht unterstützt. In diesen Versionen kann das Verhalten unvorhersehbar sein. Daher sollten Sie dafür sorgen, dass wichtige Alarme jedes Mal vorhanden sind, wenn Ihr Service Worker gestartet wird. Beispiel:
async function checkAlarmState() {
const alarm = await chrome.alarms.get("my-alarm");
if (!alarm) {
await chrome.alarms.create("my-alarm", { periodInMinutes: 1 });
}
}
checkAlarmState();
Wenn Ihr Alarm dynamisch basierend auf einer Nutzeraktion erstellt wird, sollten Sie speichern, dass ein Alarm an anderer Stelle erstellt wurde, damit Sie ihn bei Bedarf neu erstellen können.
Beispiele
In den folgenden Beispielen wird gezeigt, wie Sie einen Alarm verwenden und darauf reagieren. Wenn Sie diese API testen möchten, installieren Sie das Beispiel für die Alarm API aus dem Repository chrome-extension-samples.
Wecker stellen
Im folgenden Beispiel wird ein Alarm im Service Worker festgelegt, wenn eine neue Version der Erweiterung installiert wird:
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
});
});
Auf einen Alarm reagieren
Im folgenden Beispiel wird das Symbol der Aktionsleiste basierend auf dem Namen des ausgelösten Alarms festgelegt.
service-worker.js:
chrome.alarms.onAlarm.addListener((alarm) => {
chrome.action.setIcon({
path: getIconPath(alarm.name),
});
});
Typen
Alarm
Attribute
-
name
String
Name dieses Alarms.
-
periodInMinutes
Optional: Zahl optional
Wenn nicht null, ist der Alarm ein wiederholender Alarm und wird in
periodInMinutesMinuten erneut ausgelöst. -
persistAcrossSessions
boolean
Chrome 150+Gibt an, ob der Alarm über Sitzungen hinweg (Browserneustarts) bestehen bleiben soll.
-
scheduledTime
Zahl
Zeit, zu der dieser Alarm ausgelöst werden sollte, in Millisekunden seit der Epoche (z.B.
Date.now() + n). Aus Leistungsgründen kann der Alarm um eine beliebige Zeit darüber hinaus verzögert worden sein.
AlarmCreateInfo
Attribute
-
delayInMinutes
Optional: Zahl optional
Zeit in Minuten, nach der das Ereignis
onAlarmausgelöst werden soll. -
name
Optional: string
Chrome 152+Name dieses Alarms.
-
periodInMinutes
Optional: Zahl optional
Wenn festgelegt, wird das Ereignis „onAlarm“ alle
periodInMinutesMinuten nach dem ursprünglichen Ereignis ausgelöst, das durchwhenoderdelayInMinutesangegeben wird. Wenn nicht festgelegt, wird der Alarm nur einmal ausgelöst. -
persistAcrossSessions
Optional: boolean
Chrome 150+Gibt an, ob der Alarm über Sitzungen hinweg (Browserneustarts) bestehen bleiben soll. In Chrome ist dieser Wert standardmäßig auf „true“ gesetzt, um dem bisherigen Verhalten zu entsprechen. Sie sollten ihn jedoch explizit festlegen, um die Kompatibilität mit verschiedenen Browsern zu maximieren.
-
when
Optional: Zahl optional
Zeit, zu der der Alarm ausgelöst werden soll, in Millisekunden seit der Epoche (z.B.
Date.now() + n).
Methoden
clear()
chrome.alarms.clear(
name?: string,
): Promise<boolean>
Löscht den Alarm mit dem angegebenen Namen.
Parameter
-
name
Optional: string
Der Name des zu löschenden Alarms. Standardmäßig ist dies ein leerer String.
Ausgabe
-
Promise<boolean>
Chrome 91+
clearAll()
chrome.alarms.clearAll(): Promise<boolean>
Löscht alle Alarme.
Ausgabe
-
Promise<boolean>
Chrome 91+
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
): Promise<void>
Erstellt einen Alarm. Zu den von alarmInfo angegebenen Zeiten wird das Ereignis onAlarm ausgelöst. Wenn ein anderer Alarm mit demselben Namen vorhanden ist (oder ohne Namen, wenn keiner angegeben ist), wird er abgebrochen und durch diesen Alarm ersetzt.
Um die Last auf dem Computer des Nutzers zu verringern, beschränkt Chrome Alarme auf höchstens einmal alle 30 Sekunden, kann sie aber auch um eine beliebige Zeit verzögern. Das heißt, wenn Sie delayInMinutes oder periodInMinutes auf weniger als 0.5 setzen, wird dies nicht berücksichtigt und es wird eine Warnung angezeigt. when kann ohne Warnung auf weniger als 30 Sekunden nach „jetzt“ gesetzt werden, aber der Alarm wird erst nach mindestens 30 Sekunden ausgelöst.
Wenn Sie Ihre App oder Erweiterung entpackt geladen haben, gibt es keine Beschränkung, wie oft der Alarm ausgelöst werden kann. Das kann beim Debuggen hilfreich sein.
Parameter
-
name
Optional: string
Optionaler Name zur Identifizierung dieses Alarms. Standardmäßig ist dies ein leerer String.
-
alarmInfo
Beschreibt, wann der Alarm ausgelöst werden soll. Die Anfangszeit muss entweder mit
whenoderdelayInMinutesangegeben werden (aber nicht mit beiden). WennperiodInMinutesfestgelegt ist, wird der Alarm alleperiodInMinutesMinuten nach dem ursprünglichen Ereignis wiederholt. Wenn für einen wiederholenden Alarm wederwhennochdelayInMinutesfestgelegt ist, wirdperiodInMinutesals Standardwert fürdelayInMinutesverwendet.
Ausgabe
-
Promise<void>
Chrome 111+Promise, das aufgelöst wird, wenn der Alarm erstellt wurde.
get()
chrome.alarms.get(
name?: string,
): Promise<Alarm | undefined>
Ruft Details zum angegebenen Alarm ab.
Parameter
-
name
Optional: string
Der Name des abzurufenden Alarms. Standardmäßig ist dies ein leerer String.
Ausgabe
-
Promise<Alarm | undefined>
Chrome 91+
Ausgabe
-
Promise<Alarm[]>
Chrome 91+