browser.alarms

Opis

Użyj interfejsu chrome.alarms API, aby zaplanować okresowe uruchamianie kodu lub uruchamianie go w określonym czasie w przyszłości.

Uprawnienia

alarms

Aby używać interfejsu browser.alarms API, 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 alarmy, które zostały pominięte. Powtarzające się alarmy włączają się co najwyżej raz, a potem 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ł się pierwotnie włączyć.

Trwałość

Trwałość alarmu możesz kontrolować w momencie jego tworzenia za pomocą flagi persistAcrossSessions. Może mieć wartość true (utrzymywana do czasu 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 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 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 ustawiany jest 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 po periodInMinutes minutach.

  • persistAcrossSessions

    wartość logiczna

    Chrome 150+

    Określa, czy alarm ma być aktywny w kolejnych sesjach (po ponownym uruchomieniu przeglądarki).

  • scheduledTime

    liczba

    Czas, w którym alarm miał się włączyć, 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 nowsza

    Nazwa tego alarmu.

  • periodInMinutes

    number opcjonalny

    Jeśli ta opcja jest ustawiona, zdarzenie onAlarm powinno być wywoływane co periodInMinutes minut po początkowym zdarzeniu określonym przez when lub delayInMinutes. Jeśli nie zostanie ustawiony, alarm zostanie uruchomiony tylko raz.

  • persistAcrossSessions

    wartość logiczna opcjonalna

    Chrome 150+

    Określa, czy alarm ma być aktywny 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 nowszy

clearAll()

chrome.alarms.clearAll(): Promise<boolean | undefined>

Usuwa wszystkie alarmy.

Zwroty

  • Promise<boolean | undefined>

    Chrome 91 lub nowszy

create()

chrome.alarms.create(
  name?: string,
  alarmInfo: AlarmCreateInfo,
)
: Promise<void>

Tworzy alarm. W okolicach czasu określonego przez alarmInfo uruchamiane 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óźniać 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 zostanie włączony przez co najmniej 30 sekund.

Aby ułatwić Ci debugowanie aplikacji lub rozszerzenia, po załadowaniu go 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

    Określa, kiedy alarm powinien się włączyć. Czas początkowy musi być określony przez atrybut when lub delayInMinutes (ale nie oba naraz). Jeśli ustawisz wartość periodInMinutes, alarm będzie się powtarzać co periodInMinutes minut po pierwszym wydarzeniu. Jeśli w przypadku powtarzającego się alarmu nie ustawiono wartości when ani delayInMinutes, domyślnie używana jest wartość periodInMinutes dla delayInMinutes.

Zwroty

  • Promise<void>

    Chrome 111 lub nowsza

    Obietnica, 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 nowszy

getAll()

chrome.alarms.getAll(): Promise<Alarm[]>

Zwraca tablicę wszystkich alarmów.

Zwroty

  • Promise<Alarm[]>

    Chrome 91 lub nowszy

Wydarzenia

onAlarm

chrome.alarms.onAlarm.addListener(
  callback: function,
)

Wywoływane po upłynięciu czasu alarmu. Przydatne na stronach wydarzeń.

Parametry

  • callback

    funkcja

    Parametr callback wygląda tak:

    (alarm: Alarm) => void