chrome.events

Opis

Przestrzeń nazw chrome.events zawiera typowe typy wykorzystywane przez interfejsy API wysyłające zdarzenia, aby powiadamiać Cię, gdy wydarzy się coś interesującego.

Pojęcia i wykorzystanie

Event to obiekt umożliwiający otrzymywanie powiadomień, gdy wydarzy się coś interesującego. Oto przykład użycia zdarzenia chrome.alarms.onAlarm do otrzymywania powiadomień o upływie alarmu:

chrome.alarms.onAlarm.addListener((alarm) => {
  appendToLog(`alarms.onAlarm -- name: ${alarm.name}, scheduledTime: ${alarm.scheduledTime}`);
});

Jak widać w przykładzie, do rejestracji powiadomień używasz konta addListener(). Argument dla funkcji addListener() to zawsze funkcja, którą zdefiniujesz do obsługi zdarzenia, ale parametry parametru zależnie od obsługiwanego zdarzenia. Sprawdzam dokumentację dotyczącą alarms.onAlarm. zobaczysz, że funkcja ma 1 parametr: obiekt alarms.Alarm ze szczegółami na temat upływu czasu.

Przykładowe interfejsy API korzystające z funkcji Zdarzenia: alarms, i18n, identity, środowisko wykonawcze. Większość Chrome interfejsów API.

Deklaracyjne moduły obsługi zdarzeń

Deklaratywne moduły obsługi zdarzeń umożliwiają definiowanie reguł złożonych z warunków deklaratywnych i czynności. Warunki są oceniane w przeglądarce, a nie w mechanizmie JavaScript, co zmniejsza opóźnienia w obie strony i pozwalają na bardzo wysoką wydajność.

Deklaracyjne moduły obsługi zdarzeń są używane np. Interfejs Deklaracyjny Content API. Ta strona opisuje podstawowe pojęcia związane ze wszystkimi zdarzeniami deklaratywnymi modułów obsługi.

Reguły

Najprostsza z reguły składa się z co najmniej jednego warunku i co najmniej jednego działania:

const rule = {
  conditions: [ /* my conditions */ ],
  actions: [ /* my actions */ ]
};

W przypadku spełnienia dowolnego z warunków wykonywane są wszystkie działania.

Oprócz warunków i działań możesz nadać każdej regule identyfikator, który upraszcza wyrejestrowanie wcześniej zarejestrowanych reguł i ustalenie priorytetu, który z nich ma być brany pod uwagę. Priorytety są uwzględniane tylko wtedy, gdy reguły są sprzeczne ze sobą lub muszą być stosowane w określonym zakresie zamówienie. Działania są wykonywane w kolejności malejącej według priorytetu reguł.

const rule = {
  id: "my rule",  // optional, will be generated if not set.
  priority: 100,  // optional, defaults to 100.
  conditions: [ /* my conditions */ ],
  actions: [ /* my actions */ ]
};

Obiekty zdarzeń

Obiekty zdarzeń mogą obsługiwać reguły. Te obiekty zdarzeń nie wywołują funkcji wywołania zwrotnego, gdy zdarzeń, ale przetestuj, czy któraś z zarejestrowanych reguł ma co najmniej jeden spełniony warunek i wykonanie powiązane z nią działania. Obiekty zdarzeń obsługujące deklaratywny interfejs API mają trzy odpowiednie metody: events.Event.addRules(), events.Event.removeRules() i events.Event.getRules().

Dodaj reguły

Aby dodać reguły, wywołaj funkcję addRules() obiektu zdarzenia. Potrzebna jest tablica instancji reguł jako pierwszy parametr i funkcję wywołania zwrotnego, która jest wywoływana po zakończeniu.

const rule_list = [rule1, rule2, ...];
addRules(rule_list, (details) => {...});

Jeśli reguły zostały wstawione, parametr details będzie zawierał tablicę wstawionych reguł. występują w tej samej kolejności co w przekazywanych rule_list, gdzie opcjonalne parametry id i Pole priority zostało wypełnione wygenerowanymi wartościami. Jeśli któraś reguła jest nieprawidłowa, na przykład dlatego, że zawiera nieprawidłowy warunek lub działanie, nie zostanie dodana żadna z reguł ani zmienna runtime.lastError jest ustawiany przy wywołaniu funkcji wywołania zwrotnego. Każda reguła w rule_list musi zawierać unikalny identyfikator identyfikator, który nie jest jeszcze używany przez inną regułę lub jest pusty.

Usuń reguły

Aby usunąć reguły, wywołaj funkcję removeRules(). Akceptuje opcjonalną tablicę identyfikatorów reguł jako pierwszego parametru, a funkcji wywołania zwrotnego jako drugiego.

const rule_ids = ["id1", "id2", ...];
removeRules(rule_ids, () => {...});

Jeśli rule_ids jest tablicą identyfikatorów, wszystkie reguły zawierające identyfikatory w tablicy są usunięto. Jeśli rule_ids podaje nieznany identyfikator, zostanie on dyskretnie ignorowany. Jeśli rule_ids ma wartość undefined. Wszystkie zarejestrowane reguły tego rozszerzenia zostały usunięte. callback() jest wywoływana przy usuwaniu reguł.

Pobierz reguły

Aby pobrać listę zarejestrowanych reguł, wywołaj funkcję getRules(). Akceptuje ona opcjonalna tablica identyfikatorów reguł o tej samej semantyce co removeRules() oraz funkcja wywołania zwrotnego.

const rule_ids = ["id1", "id2", ...];
getRules(rule_ids, (details) => {...});

Parametr details przekazany do funkcji callback() odnosi się do tablicy reguł, w tym opcjonalnych parametrów.

Wyniki

Aby osiągnąć maksymalną skuteczność, pamiętaj o przestrzeganiu poniższych wskazówek.

Zbiorcze rejestrowanie i wyrejestrowywanie reguł Po każdej rejestracji lub wyrejestrowaniu Chrome musi: aktualizowania wewnętrznych struktur danych. Ta aktualizacja jest kosztowna.

zamiast
const rule1 = {...};
const rule2 = {...};
chrome.declarativeWebRequest.onRequest.addRules([rule1]);
chrome.declarativeWebRequest.onRequest.addRules([rule2]);
Preferowane
const rule1 = {...};
const rule2 = {...};
chrome.declarativeWebRequest.onRequest.addRules([rule1, rule2]);

W obiekcie events.UrlFilter używaj dopasowywania podłańcucha zamiast wyrażeń regularnych. Dopasowywanie na podstawie podłańcuchów jest niezwykle szybkie.

zamiast
const match = new chrome.declarativeWebRequest.RequestMatcher({
  url: {urlMatches: "example.com/[^?]*foo" }
});
Preferowane
const match = new chrome.declarativeWebRequest.RequestMatcher({
  url: {hostSuffix: "example.com", pathContains: "foo"}
});

Jeśli masz wiele reguł o tych samych działaniach, scal je w jedną. Reguły uruchamiają działania natychmiast po spełnieniu jednego warunku. To przyspieszy i zmniejsza wykorzystanie pamięci w przypadku zduplikowanych zestawów działań.

zamiast
const condition1 = new chrome.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'example.com' }
});
const condition2 = new chrome.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'foobar.com' }
});
const rule1 = { conditions: [condition1],
                actions: [new chrome.declarativeWebRequest.CancelRequest()]
              };
const rule2 = { conditions: [condition2],
                actions: [new chrome.declarativeWebRequest.CancelRequest()]
              };
chrome.declarativeWebRequest.onRequest.addRules([rule1, rule2]);
Preferowane
const condition1 = new chrome.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'example.com' }
});
const condition2 = new chrome.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'foobar.com' }
});
const rule = { conditions: [condition1, condition2],
              actions: [new chrome.declarativeWebRequest.CancelRequest()]
             };
chrome.declarativeWebRequest.onRequest.addRules([rule]);

Filtrowane zdarzenia

Filtrowane zdarzenia to mechanizm, który umożliwia detektorom określenie podzbioru zdarzeń, którymi są co może Cię zainteresować. Detektor używający filtra nie zostanie wywołany w przypadku zdarzeń, które nie spełniają wartości który sprawia, że kod odtwarzania jest bardziej deklaratywny i wydajny. Skrypt service worker musi nie może się więc obudzić w związku z wydarzeniami, które są dla niego nieistotne.

Filtrowane zdarzenia mają umożliwiać przejście z kodu ręcznego filtrowania.

zamiast
chrome.webNavigation.onCommitted.addListener((event) => {
  if (hasHostSuffix(event.url, 'google.com') ||
      hasHostSuffix(event.url, 'google.com.au')) {
    // ...
  }
});
Preferowane
chrome.webNavigation.onCommitted.addListener((event) => {
  // ...
}, {url: [{hostSuffix: 'google.com'},
          {hostSuffix: 'google.com.au'}]});

Zdarzenia obsługują określone filtry, które mają dla niego znaczenie. Lista filtrów używanych przez zdarzenie obsługiwane dane są wymienione w dokumentacji tego zdarzenia w sekcji „filtry” .

W przypadku dopasowywania adresów URL (jak w przykładzie powyżej) filtry zdarzeń obsługują ten sam adres URL możliwości w sposób wyraźny za pomocą events.UrlFilter, z wyjątkiem dopasowania schematu i portów.

Typy

Event

Obiekt, który umożliwia dodawanie i usuwanie detektorów zdarzenia Chrome.

Właściwości

  • addListener

    nieważne

    Rejestruje detektor wywołania zwrotnego zdarzenia.

    Funkcja addListener wygląda tak:

    (callback: H) => {...}

    • wywołanie zwrotne

      H

      Wywoływane po wystąpieniu zdarzenia. Parametry tej funkcji zależą od typu zdarzenia.

  • addRules

    nieważne

    Rejestruje reguły obsługi zdarzeń.

    Funkcja addRules wygląda tak:

    (rules: Rule<anyany>[], callback?: function) => {...}

    • reguły

      Reguła<dowolna>[]

      Reguły do zarejestrowania. Nie zastępują one wcześniej zarejestrowanych reguł.

    • wywołanie zwrotne

      funkcja optional

      Parametr callback wygląda tak:

      (rules: Rule<anyany>[]) => void

      • reguły

        Reguła<dowolna>[]

        Zarejestrowane reguły; parametry opcjonalne są wypełniane wartościami.

  • getRules

    nieważne

    Zwraca obecnie zarejestrowane reguły.

    Funkcja getRules wygląda tak:

    (ruleIdentifiers?: string[], callback: function) => {...}

    • ruleIdentifiers

      string[] opcjonalnie

      Jeśli tablica zostanie przekazana, zwracane są tylko reguły, które zawierają zawarte w niej identyfikatory.

    • wywołanie zwrotne

      funkcja

      Parametr callback wygląda tak:

      (rules: Rule<anyany>[]) => void

      • reguły

        Reguła<dowolna>[]

        Zarejestrowane reguły; parametry opcjonalne są wypełniane wartościami.

  • hasListener

    nieważne

    Funkcja hasListener wygląda tak:

    (callback: H) => {...}

    • wywołanie zwrotne

      H

      Detektor, którego stan rejestracji ma zostać przetestowany.

    • returns

      wartość logiczna

      Prawda, jeśli zdarzenie wywołania zwrotnego jest zarejestrowane.

  • hasListeners

    nieważne

    Funkcja hasListeners wygląda tak:

    () => {...}

    • returns

      wartość logiczna

      Prawda, jeśli w zdarzeniu są zarejestrowani detektory zdarzeń.

  • removeListener,

    nieważne

    Wyrejestrowuje ze zdarzenia wywołanie zwrotne detektora zdarzeń.

    Funkcja removeListener wygląda tak:

    (callback: H) => {...}

    • wywołanie zwrotne

      H

      Odbiornik, który zostanie niezarejestrowany.

  • removeRules

    nieważne

    Wyrejestrowuje obecnie zarejestrowane reguły.

    Funkcja removeRules wygląda tak:

    (ruleIdentifiers?: string[], callback?: function) => {...}

    • ruleIdentifiers

      string[] opcjonalnie

      Jeśli tablica jest przekazywana, wyrejestrowane są tylko reguły, które zawierają zawarte w niej identyfikatory.

    • wywołanie zwrotne

      funkcja optional

      Parametr callback wygląda tak:

      () => void

Rule

Opis reguły deklaratywnej do obsługi zdarzeń.

Właściwości

  • działania

    dowolne[]

    Lista działań, które są wywoływane, gdy jeden z warunków jest spełniony.

  • warunku

    dowolne[]

    Lista warunków, które mogą aktywować działania.

  • id

    ciąg znaków opcjonalny

    Opcjonalny identyfikator, który umożliwia odwoływanie się do tej reguły.

  • kampanii

    liczba opcjonalnie

    Opcjonalny priorytet tej reguły. Domyślna wartość to 100.

  • tagi

    string[] opcjonalnie

    Za ich pomocą można dodawać adnotacje do reguł i wykonywać operacje na ich zbiorach.

UrlFilter

Filtruje adresy URL pod kątem różnych kryteriów. Zobacz Filtrowanie zdarzeń. Wielkość liter we wszystkich kryteriach ma znaczenie.

Właściwości

  • cidrBlocks

    string[] opcjonalnie

    Chrome w wersji 123 lub nowszej .

    Dopasowanie, jeśli część adresu URL będąca hostem jest adresem IP i znajduje się w dowolnym z bloków CIDR określonych w tablicy.

  • hostContains

    ciąg znaków opcjonalny

    Pasuje, jeśli nazwa hosta w adresie URL zawiera określony ciąg. Aby sprawdzić, czy komponent nazwy hosta ma prefiks „foo”, użyj parametru hostContains: „.foo”. Pasuje do „www.foobar.com”. i „foo.com”, ponieważ na początku nazwy hosta jest dodawana kropka. Komponent hostContains może też służyć do dopasowywania do sufiksu komponentu („foo.”) lub dokładnego dopasowania do komponentów („.foo.”). Dopasowanie sufiksu i dopasowania ścisłego ostatnich komponentów trzeba wykonać oddzielnie za pomocą parametru hostSuffix, ponieważ na końcu nazwy hosta nie jest dodawana żadna niepewna kropka.

  • hostEquals

    ciąg znaków opcjonalny

    Dopasowuje się, jeśli nazwa hosta w adresie URL jest równa określonemu ciągowi znaków.

  • hostPrefix

    ciąg znaków opcjonalny

    Dopasowuje się, jeśli nazwa hosta adresu URL zaczyna się określonym ciągiem znaków.

  • hostSuffix

    ciąg znaków opcjonalny

    Pasuje, jeśli nazwa hosta w adresie URL kończy się określonym ciągiem.

  • originAndPathMatches

    ciąg znaków opcjonalny

    Pasuje, jeśli adres URL bez segmentu zapytania i identyfikatora fragmentu pasuje do określonego wyrażenia regularnego. Numery portów są usuwane z adresu URL, jeśli pasują do domyślnego numeru portu. Wyrażenia regularne używają składni RE2.

  • pathContains

    ciąg znaków opcjonalny

    Pasuje, jeśli segment ścieżki adresu URL zawiera określony ciąg.

  • pathEquals

    ciąg znaków opcjonalny

    Dopasowuje się, jeśli segment ścieżki adresu URL jest równy określonemu ciągowi znaków.

  • pathPrefix

    ciąg znaków opcjonalny

    Dopasowuje się, jeśli segment ścieżki adresu URL zaczyna się określonym ciągiem znaków.

  • pathSuffix

    ciąg znaków opcjonalny

    Pasuje, jeśli segment ścieżki adresu URL kończy się określonym ciągiem.

  • ports

    (liczba | numer[])[] opcjonalny

    Pasuje, jeśli port adresu URL jest na dowolnej z określonych list portów. Na przykład [80, 443, [1000, 1200]] dopasowuje wszystkie żądania na porcie 80, 443 i z zakresu 1000–1200.

  • queryContains

    ciąg znaków opcjonalny

    Pasuje, jeśli segment zapytania w adresie URL zawiera określony ciąg znaków.

  • queryEquals

    ciąg znaków opcjonalny

    Dopasowuje, jeśli segment zapytania w adresie URL jest równy określonemu ciągowi znaków.

  • queryPrefix

    ciąg znaków opcjonalny

    Dopasowuje, jeśli segment zapytania adresu URL zaczyna się określonym ciągiem znaków.

  • querySuffix

    ciąg znaków opcjonalny

    Pasuje, jeśli segment zapytania w adresie URL kończy się określonym ciągiem znaków.

  • schematy

    string[] opcjonalnie

    Dopasowuje, jeśli schemat adresu URL jest równy dowolnemu ze schematów określonych w tablicy.

  • urlContains

    ciąg znaków opcjonalny

    Pasuje, jeśli adres URL (bez identyfikatora fragmentu) zawiera określony ciąg znaków. Numery portów są usuwane z adresu URL, jeśli pasują do domyślnego numeru portu.

  • urlEquals

    ciąg znaków opcjonalny

    Dopasowuje, jeśli adres URL (bez identyfikatora fragmentu) jest równy określonemu ciągowi znaków. Numery portów są usuwane z adresu URL, jeśli pasują do domyślnego numeru portu.

  • urlMatches

    ciąg znaków opcjonalny

    Pasuje, jeśli adres URL (bez identyfikatora fragmentu) pasuje do określonego wyrażenia regularnego. Numery portów są usuwane z adresu URL, jeśli pasują do domyślnego numeru portu. Wyrażenia regularne używają składni RE2.

  • urlPrefix

    ciąg znaków opcjonalny

    Pasuje, jeśli adres URL (bez identyfikatora fragmentu) zaczyna się określonym ciągiem znaków. Numery portów są usuwane z adresu URL, jeśli pasują do domyślnego numeru portu.

  • urlSuffix

    ciąg znaków opcjonalny

    Pasuje, jeśli adres URL (bez identyfikatora fragmentu) kończy się określonym ciągiem. Numery portów są usuwane z adresu URL, jeśli pasują do domyślnego numeru portu.