Opis
Użyj interfejsu API chrome.alarms, aby zaplanować okresowe uruchamianie kodu lub uruchamianie go w określonym czasie w przyszłości.
Uprawnienia
alarmsAby korzystać z interfejsu API chrome.alarms, zadeklaruj uprawnienie "alarms" w pliku manifestu:
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
Pojęcia i użycie
Aby zapewnić niezawodne działanie, warto zrozumieć, jak działa interfejs API.
Uśpienie urządzenia
Alarmy działają nadal, gdy urządzenie jest uśpione. Alarm nie wybudzi jednak urządzenia. Gdy urządzenie się wybudzi, uruchomią się wszystkie pominięte alarmy. Alarmy powtarzające się uruchomią się co najwyżej raz, a następnie zostaną ponownie zaplanowane z określonym okresem, począwszy od momentu wybudzenia urządzenia, bez uwzględniania czasu, który upłynął od pierwotnego ustawienia alarmu.
Trwałość
Trwałość alarmu możesz kontrolować w momencie jego tworzenia za pomocą flagi persistAcrossSessions. Można ją ustawić na true (alarm będzie działać do czasu aktualizacji rozszerzenia) lub false (alarm zostanie wyczyszczony, jeśli rozszerzenie zostanie ponownie załadowane lub przeglądarka zostanie ponownie uruchomiona, a także po każdej aktualizacji rozszerzenia).
Inne przeglądarki i starsze wersje Chrome
Ta właściwość nie jest obsługiwana w innych przeglądarkach (problem) ani w wersjach Chrome starszych niż Chrome 150, w których zachowanie może być nieprzewidywalne. Dlatego najlepiej jest upewnić się, że ważne alarmy istnieją za każdym razem, gdy uruchamia się skrypt service worker. Na przykład:
async function checkAlarmState() {
const alarm = await chrome.alarms.get("my-alarm");
if (!alarm) {
await chrome.alarms.create("my-alarm", { periodInMinutes: 1 });
}
}
checkAlarmState();
Jeśli alarm jest tworzony dynamicznie na podstawie działania użytkownika, możesz zapisać informację o utworzeniu alarmu w innym miejscu, aby w razie potrzeby go odtworzyć.
Przykłady
Poniższe przykłady pokazują, jak używać alarmu i reagować na niego. Aby wypróbować ten interfejs API, zainstaluj przykład Alarm API z repozytorium chrome-extension-samples.
Ustaw alarm
Poniższy przykład ustawia alarm w skrypcie service worker, gdy zainstalowana zostanie nowa wersja rozszerzenia:
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
});
});
Reagowanie na alarm
Poniższy przykład ustawia ikonę paska narzędzi działania na podstawie nazwy alarmu, który się włączył.
service-worker.js:
chrome.alarms.onAlarm.addListener((alarm) => {
chrome.action.setIcon({
path: getIconPath(alarm.name),
});
});
Typy
Alarm
Właściwości
-
nazwa
ciąg znaków
Nazwa tego alarmu.
-
periodInMinutes
liczba opcjonalna
Jeśli nie jest to wartość null, alarm jest powtarzany i zostanie ponownie uruchomiony po
periodInMinutesminutach. -
persistAcrossSessions
Wartość logiczna
OczekujeCzy alarm ma być trwały w różnych sesjach (ponowne uruchomienia przeglądarki).
-
scheduledTime
liczba
Czas, o którym zaplanowano uruchomienie tego alarmu, w milisekundach od początku epoki (np.
Date.now() + n). Ze względu na wydajność alarm może być opóźniony o dowolną wartość.
AlarmCreateInfo
Właściwości
-
delayInMinutes
liczba opcjonalna
Czas w minutach, po którym ma się uruchomić zdarzenie
onAlarm. -
periodInMinutes
liczba opcjonalna
Jeśli ta opcja jest ustawiona, zdarzenie onAlarm powinno się uruchamiać co
periodInMinutesminut po początkowym zdarzeniu określonym przezwhenlubdelayInMinutes. Jeśli ta opcja nie jest ustawiona, alarm uruchomi się tylko raz. -
persistAcrossSessions
wartość logiczna opcjonalna
OczekujeCzy alarm ma być trwały w różnych sesjach (ponowne uruchomienia przeglądarki). W Chrome domyślnie jest to wartość true, aby zachować dotychczasowe działanie, ale aby zmaksymalizować zgodność z różnymi przeglądarkami, należy ustawić tę wartość wyraźnie.
-
kiedy
liczba opcjonalna
Czas, o którym ma się uruchomić alarm, w milisekundach od początku epoki (np.
Date.now() + n).
Metody
clear()
chrome.alarms.clear(
name?: string,
): Promise<boolean>
Usuwa alarm o podanej nazwie.
Parametry
-
nazwa
ciąg znaków opcjonalny
Nazwa alarmu do usunięcia. Domyślnie jest to pusty ciąg znaków.
Zwroty
-
Promise<boolean>
Chrome 91+
clearAll()
chrome.alarms.clearAll(): Promise<boolean>
Usuwa wszystkie alarmy.
Zwroty
-
Promise<boolean>
Chrome 91+
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
): Promise<void>
Tworzy alarm. W pobliżu czasu określonego przez alarmInfo uruchamia się zdarzenie onAlarm. Jeśli istnieje inny alarm o tej samej nazwie (lub bez nazwy, jeśli nie została określona), zostanie on anulowany i zastąpiony tym alarmem.
Aby zmniejszyć obciążenie komputera użytkownika, Chrome ogranicza alarmy do maksymalnie 1 alarmu co 30 sekund, ale może je opóźnić o dowolną wartość. Oznacza to, że ustawienie delayInMinutes lub periodInMinutes na wartość mniejszą niż 0.5 nie będzie respektowane i spowoduje ostrzeżenie. Wartość when można ustawić na mniej niż 30 sekund po „teraz” bez ostrzeżenia, ale alarm nie uruchomi się przez co najmniej 30 sekund.
Aby ułatwić debugowanie aplikacji lub rozszerzenia, gdy zostało ono wczytane bez rozpakowania, nie ma ograniczenia częstotliwości uruchamiania alarmu.
Parametry
-
nazwa
ciąg znaków opcjonalny
Opcjonalna nazwa identyfikująca ten alarm. Domyślnie jest to pusty ciąg znaków.
-
alarmInfo
Określa, kiedy ma się uruchomić alarm. Początkowy czas musi być określony przez
whenlubdelayInMinutes(ale nie oba). Jeśli ustawiszperiodInMinutes, alarm będzie się powtarzać coperiodInMinutesminut po początkowym zdarzeniu. Jeśli dla alarmu powtarzającego się nie ustawiszwhenanidelayInMinutes,periodInMinutesbędzie używane jako domyślna wartośćdelayInMinutes.
Zwroty
-
Promise<void>
Chrome 111+Obietnica, która zostanie spełniona po utworzeniu alarmu.
get()
chrome.alarms.get(
name?: string,
): Promise<Alarm | undefined>
Pobiera szczegóły dotyczące określonego alarmu.
Parametry
-
nazwa
ciąg znaków opcjonalny
Nazwa alarmu do pobrania. Domyślnie jest to pusty ciąg znaków.
Zwroty
-
Promise<Alarm | undefined>
Chrome 91+
Zwroty
-
Promise<Alarm[]>
Chrome 91+