Opis
Użyj interfejsu API chrome.alarms
, aby zaplanować okresowe lub w przyszłości uruchamianie kodu.
Uprawnienia
alarms
Aby używać interfejsu API chrome.alarms
, zadeklaruj uprawnienie "alarms"
w pliku manifestu:
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
Pojęcia i wykorzystanie
Aby zapewnić niezawodne działanie, warto poznać sposób działania interfejsu API.
Uśpienie urządzenia
Alarmy nadal działają, gdy urządzenie jest uśpione. Alarm nie będzie jednak Wybudź urządzenie. Gdy urządzenie się wybudzi, zostaną uruchomione wszystkie nieodebrane alarmy. Powtarzające się alarmy zostaną uruchomione maksymalnie raz, a następnie zostaną ponownie zaplanowane za pomocą w określonym czasie, licząc od momentu wybudzenia urządzenia, bez uwzględniania dowolny czas, który upłynął od pierwotnie ustawionego alarmu.
Trwałość
Alarmy zwykle działają do czasu zaktualizowania rozszerzenia. Nie jest to jednak gwarantowane, a alarmy może zostać wyczyszczona po ponownym uruchomieniu przeglądarki. Dlatego rozważ ustawienie wartości w miejscu na dane. po utworzeniu alarmu, a następnie upewnij się, że istnieje on przy każdym uruchomieniu skryptu service worker. Na przykład:
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();
Przykłady
Poniższe przykłady pokazują, jak używać alarmu i jak na niego zareagować. Aby wypróbować ten interfejs API, zainstaluj przykładowy interfejs Alarm API ze strony chrome-extension-samples. z repozytorium.
Ustaw alarm
Ten przykład pozwala ustawić alarm w skrypcie service worker po zainstalowaniu rozszerzenia:
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
});
});
Reagowanie na alarm
W przykładzie poniżej ustawiamy ikonę na pasku narzędzi działań na podstawie nazwy uruchomionego alarmu.
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 opcjonalnie
Jeśli nie ma wartości null, alarm jest powtarzający się i zostanie ponownie uruchomiony za
periodInMinutes
min. -
scheduledTime
liczba
Godzina, na którą ten alarm miał być uruchomiony, w milisekundach po zakończeniu epoki (np.
Date.now() + n
). Ze względu na wydajność alarm mógł zostać opóźniony o dowolną kwotę.
AlarmCreateInfo
Właściwości
-
delayInMinutes
liczba opcjonalnie
Czas (w minutach), po którym powinno być uruchamiane zdarzenie
onAlarm
. -
periodInMinutes
liczba opcjonalnie
Jeśli jest ustawione, zdarzenie onAlarm powinno być uruchamiane co
periodInMinutes
min po zdarzeniu początkowym określonym przez parametrwhen
lubdelayInMinutes
. Jeśli nie zostanie ustawiony, alarm uruchomi się tylko raz. -
kiedy
liczba opcjonalnie
Czas, w którym powinien zostać uruchomiony alarm, wyrażony w milisekundach po zakończeniu epoki (np.
Date.now() + n
).
Metody
clear()
chrome.alarms.clear(
name?: string,
callback?: function,
)
Czyści 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.
-
wywołanie zwrotne
funkcja optional
Parametr
callback
wygląda tak:(wasCleared: boolean) => void
-
wasCleared
wartość logiczna
-
Zwroty
-
Promise<boolean>
Chrome w wersji 91 lub nowszej .Obietnice są obsługiwane w Manifest V3 i nowszych, ale wywołania zwrotne są podane w przypadku zgodność wsteczną. Nie można użyć obu w tym samym wywołaniu funkcji. Polecenie promowana jest realizowane z tym samym typem, który jest przekazywany do wywołania zwrotnego.
clearAll()
chrome.alarms.clearAll(
callback?: function,
)
Usuwa wszystkie alarmy.
Parametry
-
wywołanie zwrotne
funkcja optional
Parametr
callback
wygląda tak:(wasCleared: boolean) => void
-
wasCleared
wartość logiczna
-
Zwroty
-
Promise<boolean>
Chrome w wersji 91 lub nowszej .Obietnice są obsługiwane w Manifest V3 i nowszych, ale wywołania zwrotne są podane w przypadku zgodność wsteczną. Nie można użyć obu w tym samym wywołaniu funkcji. Polecenie promowana jest realizowane z tym samym typem, który jest przekazywany do wywołania zwrotnego.
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
callback?: function,
)
Tworzy alarm. W pobliżu godzin określonych przez alarmInfo
wywoływane jest zdarzenie onAlarm
. Jeśli pojawi się inny alarm o tej samej nazwie (lub bez niej, jeśli nie zostanie podana), zostanie on anulowany i zastąpiony tym alarmem.
Aby zmniejszyć obciążenie komputera użytkownika, Chrome ogranicza alarmy nie częściej niż co 30 sekund, ale może opóźniać ich działanie o dowolną kwotę. Oznacza to, że ustawienie wartości delayInMinutes
lub periodInMinutes
na mniejsze niż 0.5
nie zostanie uwzględnione i powoduje wyświetlenie ostrzeżenia. W przypadku parametru when
można ustawić wartość „czasem krótszym niż 30 sekund” od czasu „teraz” bez ostrzeżenia, ale nie spowoduje uruchomienia alarmu na co najmniej 30 sekund.
Aby ułatwić debugowanie aplikacji lub rozszerzenia po rozpakowaniu, nie ma ograniczeń co do częstotliwości uruchamiania alarmu.
Parametry
-
nazwa
ciąg znaków opcjonalny
Opcjonalna nazwa tego alarmu. Domyślnie jest to pusty ciąg znaków.
-
alarmInfo
Opisuje, kiedy ma się uruchomić alarm. Czas początkowy musi być określony przez
when
lubdelayInMinutes
(ale nie obie). Jeśli ustawiona jest zasadaperiodInMinutes
, alarm będzie się powtarzał coperiodInMinutes
min po pierwszym wydarzeniu. Jeśli powtarzający się alarm nie jest ustawiony nawhen
anidelayInMinutes
, domyślną wartością wdelayInMinutes
jestperiodInMinutes
. -
wywołanie zwrotne
funkcja optional
Chrome w wersji 111 lub nowszej .Parametr
callback
wygląda tak:() => void
Zwroty
-
Obietnica<void>
Chrome w wersji 111 lub nowszej .Obietnice są obsługiwane w Manifest V3 i nowszych, ale wywołania zwrotne są podane w przypadku zgodność wsteczną. Nie można użyć obu w tym samym wywołaniu funkcji. Polecenie promowana jest realizowane z tym samym typem, który jest przekazywany do wywołania zwrotnego.
get()
chrome.alarms.get(
name?: string,
callback?: function,
)
Pobiera szczegóły określonego alarmu.
Parametry
Zwroty
-
Promise<Alarm | niezdefiniowane>
Chrome w wersji 91 lub nowszej .Obietnice są obsługiwane w Manifest V3 i nowszych, ale wywołania zwrotne są podane w przypadku zgodność wsteczną. Nie można użyć obu w tym samym wywołaniu funkcji. Polecenie promowana jest realizowane z tym samym typem, który jest przekazywany do wywołania zwrotnego.
getAll()
chrome.alarms.getAll(
callback?: function,
)
Pobiera tablicę wszystkich alarmów.
Parametry
Zwroty
-
Obietnica<Alarm[]>
Chrome w wersji 91 lub nowszej .Obietnice są obsługiwane w Manifest V3 i nowszych, ale wywołania zwrotne są podane w przypadku zgodność wsteczną. Nie można użyć obu w tym samym wywołaniu funkcji. Polecenie promowana jest realizowane z tym samym typem, który jest przekazywany do wywołania zwrotnego.