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:
chrome.storage.local.get(["badgeText"], ({ badgeText }) => { chrome.action.setBadgeText({ text: badgeText }); chrome.action.onClicked.addListener(handleActionClick); });
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ąpienieStorageArea
ma własne zdarzenieonChanged
. 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.