Opis
Użyj interfejsu chrome.alarms API, aby zaplanować okresowe uruchamianie kodu lub uruchomienie go w określonym czasie w przyszłości.
Uprawnienia
alarmsAby używać interfejsu API browser.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ą, gdy urządzenie jest uśpione. Alarm nie wybudzi jednak urządzenia. Gdy urządzenie się wybudzi, zostaną uruchomione wszystkie pominięte alarmy. Powtarzające się alarmy będą uruchamiane co najwyżej raz, a następnie będą planowane ponownie z użyciem określonego okresu, zaczynając od momentu wybudzenia urządzenia, bez uwzględniania czasu, który upłynął od momentu, gdy alarm został pierwotnie ustawiony.
Trwałość
Trwałość alarmu możesz kontrolować podczas jego tworzenia za pomocą flagi persistAcrossSessions. Możesz ustawić wartość true (utrzymuje się do momentu aktualizacji rozszerzenia) lub false (jest usuwana, gdy rozszerzenie zostanie ponownie załadowane lub przeglądarka zostanie uruchomiona ponownie, a także przy każdej aktualizacji rozszerzenia).
Inne przeglądarki i wcześniejsze wersje Chrome
Ta właściwość nie jest obsługiwana w innych przeglądarkach (problem) ani w wersjach Chrome starszych niż Chrome 150, gdzie zachowanie może być nieprzewidywalne. Dlatego najlepiej jest upewnić się, że ważne alarmy istnieją przy każdym uruchomieniu skryptu service worker. Na przykład:
async function checkAlarmState() {
const alarm = await browser.alarms.get("my-alarm");
if (!alarm) {
await browser.alarms.create("my-alarm", { periodInMinutes: 1 });
}
}
checkAlarmState();
Jeśli alarm jest tworzony dynamicznie na podstawie działania użytkownika, możesz zapisać informację o jego utworzeniu w innym miejscu, aby w razie potrzeby móc go odtworzyć.
Przykłady
Poniższe przykłady pokazują, jak używać alarmu i jak na niego reagować. Aby wypróbować ten interfejs API, zainstaluj przykład interfejsu Alarm API z repozytorium chrome-extension-samples.
Ustaw alarm
W tym przykładzie alarm jest ustawiany w skrypcie service worker po zainstalowaniu nowej wersji rozszerzenia:
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
});
});
Reagowanie na alarm
W tym przykładzie ikona paska narzędzi działania jest ustawiana na podstawie nazwy alarmu, który się włączył.
service-worker.js:
browser.alarms.onAlarm.addListener((alarm) => {
browser.action.setIcon({
path: getIconPath(alarm.name),
});
});
Typy
Alarm
Właściwości
-
nazwa
tekst
Nazwa tego alarmu.
-
periodInMinutes
number optional
Jeśli nie jest pusta, alarm jest powtarzany i włączy się ponownie za
periodInMinutesmin. -
persistAcrossSessions
wartość logiczna
Chrome 150+Określa, czy alarm powinien być zachowywany między sesjami (ponownymi uruchomieniami przeglądarki).
-
scheduledTime
liczba
Czas, na który zaplanowano uruchomienie tego alarmu, w milisekundach od początku epoki (np.
Date.now() + n). Ze względu na wydajność alarm mógł zostać opóźniony o dowolną wartość.
AlarmCreateInfo
Właściwości
-
delayInMinutes
number optional
Czas w minutach, po którym powinno zostać wywołane zdarzenie
onAlarm. -
nazwa
ciąg znaków opcjonalny
Chrome 152 lub nowsza wersjaNazwa tego alarmu.
-
periodInMinutes
number optional
Jeśli ta opcja jest ustawiona, zdarzenie onAlarm powinno być wywoływane co
periodInMinutesmin po początkowym zdarzeniu określonym przezwhenlubdelayInMinutes. Jeśli nie zostanie ustawiony, alarm włączy się tylko raz. -
persistAcrossSessions
boolean opcjonalne
Chrome 150+Określa, czy alarm powinien być zachowywany między sesjami (ponownymi uruchomieniami przeglądarki). W Chrome domyślnie jest ustawiona wartość „true”, aby zachować zgodność z dotychczasowym działaniem, ale należy ustawić tę wartość jawnie, aby zmaksymalizować zgodność między przeglądarkami.
-
kiedy
number optional
Czas, w którym alarm powinien się uruchomić, podany 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, który chcesz wyłączyć. Domyślnie jest to pusty ciąg znaków.
Zwroty
-
Promise<boolean>
Chrome 91 lub nowsza wersja
clearAll()
chrome.alarms.clearAll(): Promise<boolean | undefined>
Usuwa wszystkie alarmy.
Zwroty
-
Promise<boolean | undefined>
Chrome 91 lub nowsza wersja
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
): Promise<void>
Tworzy alarm. W pobliżu czasu określonego przez alarmInfo wywoływane jest zdarzenie onAlarm. Jeśli istnieje inny alarm o tej samej nazwie (lub bez nazwy, jeśli nie została podana), zostanie on anulowany i zastąpiony tym alarmem.
Aby zmniejszyć obciążenie komputera użytkownika, Chrome ogranicza alarmy do maksymalnie 1 na sekundę, ale może je opóźnić o dowolną wartość. Oznacza to, że ustawienie wartości delayInMinutes lub periodInMinutes na mniej niż 1 sekundę nie zostanie uwzględnione i spowoduje wyświetlenie ostrzeżenia. Wartość when można ustawić na mniej niż 1 sekundę po „teraz” bez ostrzeżenia, ale alarm nie zostanie uruchomiony przez co najmniej 1 sekundę.
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 alarm powinien się uruchomić. Czas początkowy musi być określony przez
whenlubdelayInMinutes(ale nie przez oba te parametry). Jeśli ustawionoperiodInMinutes, alarm będzie powtarzany coperiodInMinutesmin po pierwszym zdarzeniu. Jeśli w przypadku alarmu powtarzanego nie ustawiono aniwhen, anidelayInMinutes, jako domyślna wartośćdelayInMinuteszostanie użytaperiodInMinutes.
Zwroty
-
thought Promise<void>
Chrome 111 lub nowsza wersjaObietnica, która zostanie spełniona po utworzeniu alarmu.
get()
chrome.alarms.get(
name?: string,
): Promise<Alarm | undefined>
Pobiera szczegółowe informacje o określonym alarmie.
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 lub nowsza wersja
Zwroty
-
Promise<Alarm[]>
Chrome 91 lub nowsza wersja