Zdarzenia w instancjach service worker

Skrypty service worker rozszerzeń obsługują zarówno standardowe zdarzenia skryptu service worker, jak i wiele zdarzeń w interfejsach API rozszerzeń. Ta sekcja zawiera opis dostępnych funkcji i wskazówki, jak z nich korzystać.

Deklarowanie zdarzeń związanych z rozszerzeniem

Moduły obsługi zdarzeń w skryptach service worker muszą być zadeklarowane w zakresie globalnym, co oznacza, że powinny znajdować się na najwyższym poziomie skryptu, a nie być zagnieżdżone w funkcjach. Dzięki temu są one rejestrowane synchronicznie podczas wstępnego wykonywania skryptu, co umożliwia Chrome wysyłanie zdarzeń do skryptu service worker natychmiast po jego uruchomieniu. Na przykład:

Niezalecane
chrome.storage.local.get(["badgeText"], ({ badgeText }) => {
  chrome.action.setBadgeText({ text: badgeText });
  chrome.action.onClicked.addListener(handleActionClick);
});

Lepsze
chrome.action.onClicked.addListener(handleActionClick);

chrome.storage.local.get(["badgeText"], ({ badgeText }) => {
  chrome.action.setBadgeText({ text: badgeText });
});

Typowe zdarzenia

Skrypty service worker rozszerzeń obsługują zdarzenia w określonych interfejsach API. Poniżej przedstawiamy kilka najczęstszych z nich. Pamiętaj, że niektóre z tych interfejsów API wymagają uprawnień do używania, a inne mogą zawierać zdarzenia, metody lub właściwości, które nie są dostępne we wszystkich wersjach Chrome. Szczegółowe informacje znajdziesz w powiązanej dokumentacji interfejsu API, a zwłaszcza w opisach zdarzeń, metod i właściwości, których chcesz użyć.

chrome.action
Wywoływane w odpowiedzi na interakcję użytkownika z ikoną na pasku narzędzi rozszerzenia, niezależnie od tego, czy ma to związek z konkretną stroną (kartą) czy z całym rozszerzeniem.
chrome.management
Udostępnia zdarzenia związane z instalacją, odinstalowaniem, włączaniem i wyłączaniem rozszerzeń.
chrome.notifications
Udostępnia zdarzenia związane z interakcją użytkownika z powiadomieniami systemowymi wygenerowanymi przez rozszerzenie.
chrome.permissions
Wskazuje, kiedy użytkownik przyznał lub unieważnił uprawnienia rozszerzenia.
chrome.runtime
Udostępnia zdarzenia związane z cyklem życia rozszerzenia, wiadomości wysłane z innych części rozszerzenia oraz powiadomienia o dostępnym rozszerzeniu lub aktualizacji Chrome.
chrome.storage.onChanged
Uruchamiany za każdym razem, gdy obiekt StorageArea zostanie wyczyszczony albo gdy wartość klucza zostanie zmieniona lub ustawiona. Pamiętaj, że każde wystąpienie StorageArea ma własne zdarzenie onChanged.
chrome.webNavigation
Dostarcza informacji o stanie żądań nawigacji w trakcie lotu.

Filtry

Aby ograniczyć zdarzenia do konkretnego przypadku użycia lub wyeliminować niepotrzebne wywołania zdarzeń, użyj interfejsów API, które obsługują filtry zdarzeń. Rozważmy na przykład rozszerzenie nasłuchujące zdarzenia tabs.onUpdated, które wykrywa, kiedy użytkownik przechodzi do konkretnej witryny. To zdarzenie będzie wywoływane przy każdej nawigacji na każdej karcie. Zamiast tego użyj parametru webNavigation.onCompleted z filtrem. Na przykład:

const filter = {
  url: [
    {
      urlMatches: 'https://www.google.com/',
    },
  ],
};

chrome.webNavigation.onCompleted.addListener(() => {
  console.info("The user has loaded my favorite website!");
}, filter);

Zdarzenia skryptu service worker

Skrypty service worker rozszerzeń obsługują więcej zdarzeń niż zdarzenia cyklu życia opisane w innym miejscu.

ServiceWorkerGlobal.fetch

Uruchamiane po pobraniu dowolnego elementu z pakietu rozszerzenia lub po wywołaniu funkcji fetch() i XMLHttpRequest() za pomocą rozszerzenia lub skryptu w wyskakującym okienku. (Wywołania ze skryptów treści nie są przechwytywane przez moduł obsługi fetch skryptu service worker). W ostatnich przypadkach musisz dodać adresy URL stron, które chcesz pobierać, do klucza "host_permissions" w manifest.json.

ServiceWorkerGlobal.message

Przekazywanie komunikatów skryptu service worker jest możliwe w uzupełnieniu przekazywania wiadomości rozszerzenia, ale oba systemy nie współpracują ze sobą. Oznacza to, że wiadomości wysyłane za pomocą metody sendMessage() (dostępnej za pomocą kilku interfejsów API rozszerzeń) nie są przechwytywane przez mechanizmy obsługi wiadomości skryptu service worker. Podobnie wiadomości wysyłane za pomocą postMessage() nie są przechwytywane przez moduły obsługi wiadomości w rozszerzeniach. Oba typy modułów obsługi wiadomości, czyli zarówno ServiceWorkerGlobal.message, jak i chrome.runtime.onMessage, są obsługiwane przez mechanizmy service worker rozszerzeń.

Zalecamy korzystanie z komunikatów o rozszerzeniach, chyba że masz konkretny powód, dla którego używasz wiadomości mechanizmów Service Worker.