Opis
Użyj interfejsu chrome.alarms API, aby zaplanować uruchamianie kodu okresowo lub w określonym czasie w przyszłości.
Uprawnienia
alarmsAby korzystać z interfejsu browser.alarms API, zadeklaruj uprawnienie "alarms" w pliku manifestu:
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
Pojęcia i zastosowanie
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 alarmy, które zostały pominięte. Powtarzające się alarmy są uruchamiane co najwyżej raz, a następnie są ponownie planowane z użyciem określonego okresu, począwszy od momentu, w którym urządzenie się włączy, bez uwzględniania czasu, który upłynął od momentu, w którym alarm miał zostać uruchomiony.
Trwałość
Podczas tworzenia alarmu możesz określić jego trwałość za pomocą flagi persistAcrossSessions. Może mieć wartość true (utrzymywana do momentu aktualizacji rozszerzenia) lub false (usuwana po ponownym załadowaniu rozszerzenia lub ponownym uruchomieniu przeglądarki oraz 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 jej działanie może być nieprzewidywalne. Dlatego za każdym razem, gdy uruchamia się skrypt service worker, warto upewnić się, że ważne alarmy istnieją. 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 na niego reagować. Aby wypróbować ten interfejs API, zainstaluj przykład interfejsu Alarm API z repozytorium chrome-extension-samples.
Ustaw alarm
W przykładzie poniżej ustawiamy alarm w skrypcie service worker, gdy zainstalowana zostanie nowa wersja 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 opcjonalny
Jeśli nie jest to wartość null, alarm jest powtarzany i włączy się ponownie za
periodInMinutesminut. -
persistAcrossSessions
wartość logiczna
Chrome 150 lub nowszyOkreśla, czy alarm ma być zachowywany w kolejnych sesjach (po ponownym uruchomieniu przeglądarki).
-
scheduledTime
liczba
Czas, w którym alarm miał zostać uruchomiony, 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 opcjonalny
Czas w minutach, po którym powinno zostać wywołane zdarzenie
onAlarm. -
nazwa
ciąg znaków opcjonalny
Chrome 152 lub nowszaNazwa tego alarmu.
-
periodInMinutes
number opcjonalny
Jeśli ta opcja jest ustawiona, zdarzenie onAlarm powinno być wywoływane co
periodInMinutesminut po początkowym zdarzeniu określonym przezwhenlubdelayInMinutes. Jeśli nie zostanie ustawiony, alarm zostanie włączony tylko raz. -
persistAcrossSessions
wartość logiczna opcjonalna
Chrome 150 lub nowszyOkreśla, czy alarm ma być zachowywany w kolejnych sesjach (po ponownym uruchomieniu przeglądarki). W Chrome domyślnie jest to wartość „true”, aby zachować zgodność z dotychczasowym działaniem, ale warto ustawić ją jawnie, aby zmaksymalizować zgodność między przeglądarkami.
-
kiedy
number opcjonalny
Czas, w którym ma się włączyć 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 wyczyszczenia. Domyślnie jest to pusty ciąg znaków.
Zwroty
-
Promise<boolean>
Chrome 91 lub nowsza
clearAll()
chrome.alarms.clearAll(): Promise<boolean>
Usuwa wszystkie alarmy.
Zwroty
-
Promise<boolean>
Chrome 91 lub nowsza
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
): Promise<void>
Tworzy alarm. W okolicach 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 określona), zostanie on anulowany i zastąpiony tym alarmem.
Aby zmniejszyć obciążenie urządzenia użytkownika, Chrome ogranicza liczbę alarmów do maksymalnie 1 na 30 sekund, ale może je opóźnić o dowolną ilość czasu. Oznacza to, że ustawienie wartości delayInMinutes lub periodInMinutes na wartość mniejszą niż 0.5 nie zostanie uwzględnione i spowoduje wyświetlenie ostrzeżenia. when można ustawić na czas krótszy niż 30 sekund po „teraz” bez ostrzeżenia, ale alarm nie włączy się przez co najmniej 30 sekund.
Aby ułatwić Ci debugowanie aplikacji lub rozszerzenia, po załadowaniu ich w formie rozpakowanej nie ma ograniczeń co do częstotliwości wywoływania alarmu.
Parametry
-
nazwa
ciąg znaków opcjonalny
Opcjonalna nazwa identyfikująca ten alarm. Domyślnie jest to pusty ciąg znaków.
-
alarmInfo
Opisuje, kiedy ma się włączyć alarm. Czas początkowy musi być określony przez
whenlubdelayInMinutes(ale nie oba). Jeśli ustawisz wartośćperiodInMinutes, alarm będzie powtarzany coperiodInMinutesminut po pierwszym zdarzeniu. Jeśli w przypadku powtarzającego się alarmu nie ustawiono wartościwhenanidelayInMinutes, domyślnie używana jest wartośćperiodInMinutes.delayInMinutes
Zwroty
-
Promise<void>
Chrome 111 lub nowszaObietnica, która zostanie spełniona po utworzeniu alarmu.
get()
chrome.alarms.get(
name?: string,
): Promise<Alarm | undefined>
Pobiera szczegóły 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 lub nowsza
Zwroty
-
Promise<Alarm[]>
Chrome 91 lub nowsza