browser.events

Opis

Przestrzeń nazw chrome.events zawiera typy wspólne używane przez interfejsy API wysyłające zdarzenia, aby powiadamiać Cię o interesujących zdarzeniach.

Pojęcia i zastosowanie

Event to obiekt, który umożliwia otrzymywanie powiadomień o interesujących zdarzeniach. Oto przykład użycia zdarzenia browser.alarms.onAlarm, aby otrzymywać powiadomienia o upływie czasu alarmu:

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

Jak widać na przykładzie, rejestracja powiadomienia odbywa się za pomocą funkcji addListener(). Argumentem funkcji addListener() jest zawsze zdefiniowana przez Ciebie funkcja obsługująca zdarzenie, ale parametry tej funkcji zależą od tego, które zdarzenie jest obsługiwane. W dokumentacji funkcji alarms.onAlarm możesz sprawdzić, że ma ona jeden parametr: obiekt alarms.Alarm, który zawiera szczegóły o upłynięciu czasu alarmu.

Przykładowe interfejsy API korzystające z wydarzeń: alarms, i18n, identity, runtime. Większość interfejsów API Chrome to robi.

Deklaratywne moduły obsługi zdarzeń

Deklaratywne procedury obsługi zdarzeń umożliwiają definiowanie reguł składających się z deklaratywnych warunków i działań. Warunki są oceniane w przeglądarce, a nie w mechanizmie JavaScript, co zmniejsza opóźnienia związane z ruchem sieciowym i pozwala osiągnąć bardzo wysoką wydajność.

Deklaratywne funkcje obsługi zdarzeń są używane np. w Declarative Content API. Na tej stronie opisano podstawowe koncepcje wszystkich deklaratywnych procedur obsługi zdarzeń.

Reguły

Najprostsza reguła składa się z co najmniej 1 warunku i co najmniej 1 działania:

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

Jeśli zostanie spełniony którykolwiek z warunków, zostaną wykonane wszystkie działania.

Oprócz warunków i działań możesz przypisać do każdej reguły identyfikator, który ułatwia wyrejestrowywanie wcześniej zarejestrowanych reguł, oraz priorytet, który określa pierwszeństwo między regułami. Priorytety są brane pod uwagę tylko wtedy, gdy reguły są ze sobą sprzeczne lub muszą być wykonywane w określonej kolejności. Działania są wykonywane w kolejności malejącej 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ą wywołania zwrotnego, gdy wystąpią zdarzenia, ale sprawdzają, czy któraś z zarejestrowanych reguł ma co najmniej 1 spełniony warunek, i wykonują działania powiązane z tą regułą. Obiekty zdarzeń obsługujące deklaratywny interfejs API mają 3 odpowiednie metody: events.Event.addRules(), events.Event.removeRules()events.Event.getRules().

Dodaj reguły

Aby dodać reguły, wywołaj funkcję addRules() obiektu zdarzenia. Jako pierwszy parametr przyjmuje tablicę instancji reguł, a jako drugi – funkcję wywołania zwrotnego, która jest wywoływana po zakończeniu działania.

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

Jeśli reguły zostały wstawione, parametr details zawiera tablicę wstawionych reguł w tej samej kolejności co w przekazanym parametrze rule_list, w którym opcjonalne parametry id i priority zostały wypełnione wygenerowanymi wartościami. Jeśli któraś reguła jest nieprawidłowa, np. zawiera nieprawidłowy warunek lub działanie, żadna z reguł nie zostanie dodana, a po wywołaniu wywołania zwrotnego zostanie ustawiona zmienna runtime.lastError. Każda reguła w rule_list musi zawierać unikalny identyfikator, który nie jest jeszcze używany przez inną regułę, lub pusty identyfikator.

Usuwanie reguł

Aby usunąć reguły, wywołaj funkcję removeRules(). Jako pierwszy parametr przyjmuje opcjonalną tablicę identyfikatorów reguł, a jako drugi – funkcję wywołania zwrotnego.

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

Jeśli rule_ids jest tablicą identyfikatorów, wszystkie reguły zawierające identyfikatory wymienione w tablicy zostaną usunięte. Jeśli element rule_ids zawiera identyfikator, który jest nieznany, jest on ignorowany. Jeśli rule_ids ma wartość undefined, wszystkie zarejestrowane reguły tego rozszerzenia zostaną usunięte. Funkcja callback() jest wywoływana po usunięciu reguł.

Pobieranie reguł

Aby pobrać listę zarejestrowanych reguł, wywołaj funkcję getRules(). Przyjmuje opcjonalną tablicę identyfikatorów reguł o takiej samej semantyce jak removeRules() oraz funkcję wywołania zwrotnego.

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

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

Wydajność

Aby uzyskać maksymalną skuteczność, pamiętaj o tych wskazówkach.

Rejestrowanie i wyrejestrowywanie reguł zbiorczo. Po każdej rejestracji lub wyrejestrowaniu Chrome musi zaktualizować wewnętrzne struktury danych. Ta aktualizacja jest kosztowną operacją.

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

Preferuj dopasowywanie podciągów do wyrażeń regularnych w events.UrlFilter. Dopasowywanie na podstawie podciągów jest niezwykle szybkie.

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

Jeśli istnieje wiele reguł, które mają te same działania, połącz je w jedną regułę. Reguły wywołują działania, gdy tylko zostanie spełniony jeden warunek. Przyspiesza to dopasowywanie i zmniejsza zużycie pamięci w przypadku zduplikowanych zestawów działań.

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

Filtrowane zdarzenia

Filtrowane zdarzenia to mechanizm, który umożliwia detektorom określanie podzbioru zdarzeń, które ich interesują. Detektor, który używa filtra, nie będzie wywoływany w przypadku zdarzeń, które nie przejdą filtra, co sprawia, że kod nasłuchiwania jest bardziej deklaratywny i wydajny. Skrypt service worker nie musi być wybudzany do obsługi zdarzeń, które go nie interesują.

Filtrowane zdarzenia mają ułatwić przejście z kodu filtrowania ręcznego.

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

Zdarzenia obsługują określone filtry, które są dla nich istotne. Lista filtrów obsługiwanych przez zdarzenie jest podana w dokumentacji tego zdarzenia w sekcji „filters” (filtry).

Podczas dopasowywania adresów URL (jak w przykładzie powyżej) filtry zdarzeń obsługują te same możliwości dopasowywania adresów URL, które można wyrazić za pomocą events.UrlFilter, z wyjątkiem dopasowywania schematu i portu.

Typy

Event

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

Właściwości

  • addListener

    pusty,

    Rejestruje wywołanie zwrotne detektora zdarzeń dla zdarzenia.

    Funkcja addListener wygląda tak:

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

    • callback

      H

      Wywoływana, gdy wystąpi zdarzenie. Parametry tej funkcji zależą od typu zdarzenia.

  • addRules

    pusty,

    Rejestruje reguły obsługi zdarzeń.

    Funkcja addRules wygląda tak:

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

    • reguły

      Rule<anyany>[]

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

    • callback

      funkcja opcjonalna

      Parametr callback wygląda tak:

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

      • reguły

        Rule<anyany>[]

        Zarejestrowane reguły, w których opcjonalne parametry są wypełnione wartościami.

  • getRules

    pusty,

    Zwraca obecnie zarejestrowane reguły.

    Funkcja getRules wygląda tak:

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

    • ruleIdentifiers

      string[] opcjonalnie

      Jeśli zostanie przekazana tablica, zwracane są tylko reguły z identyfikatorami zawartymi w tej tablicy.

    • callback

      funkcja

      Parametr callback wygląda tak:

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

      • reguły

        Rule<anyany>[]

        Zarejestrowane reguły, w których opcjonalne parametry są wypełnione wartościami.

  • hasListener

    pusty,

    Funkcja hasListener wygląda tak:

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

    • callback

      H

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

    • returns

      wartość logiczna

      Wartość Prawda, jeśli do zdarzenia zarejestrowano wywołanie zwrotne.

  • hasListeners

    pusty,

    Funkcja hasListeners wygląda tak:

    () => {...}

    • returns

      wartość logiczna

      Wartość „true”, jeśli do zdarzenia zarejestrowano detektory zdarzeń.

  • removeListener

    pusty,

    Usuwa wywołanie zwrotne detektora zdarzeń ze zdarzenia.

    Funkcja removeListener wygląda tak:

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

    • callback

      H

      Detektor, który ma zostać wyłączony.

  • removeRules

    pusty,

    Usuwa obecnie zarejestrowane reguły.

    Funkcja removeRules wygląda tak:

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

    • ruleIdentifiers

      string[] opcjonalnie

      Jeśli zostanie przekazana tablica, wyrejestrowane zostaną tylko reguły z identyfikatorami zawartymi w tej tablicy.

    • callback

      funkcja opcjonalna

      Parametr callback wygląda tak:

      () => void

Rule

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

Właściwości

  • działania

    dowolny[]

    Lista działań, które są wywoływane, jeśli zostanie spełniony jeden z warunków.

  • schorzenia

    dowolny[]

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

  • id

    ciąg znaków opcjonalny

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

  • kampanii

    number opcjonalny

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

  • Tagi

    string[] opcjonalnie

    Tagi służą do dodawania adnotacji do reguł i wykonywania operacji na zestawach reguł.

UrlFilter

Filtruje adresy URL według różnych kryteriów. Zobacz filtrowanie zdarzeń. Wszystkie kryteria uwzględniają wielkość liter.

Właściwości

  • cidrBlocks

    string[] opcjonalnie

    Chrome 123 lub nowsza

    Pasuje, jeśli część hosta adresu URL jest adresem IP i znajduje się w dowolnym bloku CIDR określonym w tablicy.

  • hostContains

    ciąg znaków opcjonalny

    Warunek jest spełniony, jeśli nazwa hosta adresu URL zawiera określony ciąg znaków. Aby sprawdzić, czy składnik nazwy hosta ma prefiks „foo”, użyj warunku hostContains: „.foo”. Pasuje do „www.foobar.com” i „foo.com”, ponieważ na początku nazwy hosta dodawana jest kropka. Podobnie hostContains może być używany do dopasowywania do sufiksu komponentu („foo.”) i do dokładnego dopasowywania do komponentów („.foo.”). Dopasowywanie do sufiksu i dopasowywanie ścisłe w przypadku ostatnich komponentów należy przeprowadzać oddzielnie za pomocą parametru hostSuffix, ponieważ na końcu nazwy hosta nie jest dodawana kropka.

  • hostEquals

    ciąg znaków opcjonalny

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

  • hostPrefix

    ciąg znaków opcjonalny

    Dopasowuje, jeśli nazwa hosta adresu URL zaczyna się od określonego ciągu znaków.

  • hostSuffix

    ciąg znaków opcjonalny

    Dopasowuje, jeśli nazwa hosta adresu 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 są zgodne z domyślnym numerem portu. Wyrażenia regularne korzystają ze składni RE2.

  • pathContains

    ciąg znaków opcjonalny

    Dopasowuje, jeśli segment ścieżki adresu URL zawiera określony ciąg znaków.

  • pathEquals

    ciąg znaków opcjonalny

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

  • pathPrefix

    ciąg znaków opcjonalny

    Dopasowuje, jeśli segment ścieżki adresu URL zaczyna się od określonego ciągu.

  • pathSuffix

    ciąg znaków opcjonalny

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

  • ports

    (number | number[])[] opcjonalny

    Warunek jest spełniony, jeśli port adresu URL znajduje się na którejkolwiek z określonych list portów. Na przykład [80, 443, [1000, 1200]] pasuje do wszystkich żądań na portach 80 i 443 oraz w zakresie 1000–1200.

  • queryContains

    ciąg znaków opcjonalny

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

  • queryEquals

    ciąg znaków opcjonalny

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

  • queryPrefix

    ciąg znaków opcjonalny

    Dopasowuje, jeśli segment zapytania adresu URL zaczyna się od określonego ciągu.

  • querySuffix

    ciąg znaków opcjonalny

    Dopasowuje, jeśli segment zapytania adresu URL kończy się określonym ciągiem.

  • schematy,

    string[] opcjonalnie

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

  • urlContains

    ciąg znaków opcjonalny

    Warunek jest spełniony, jeśli adres URL (bez identyfikatora fragmentu) zawiera określony ciąg znaków. Numery portów są usuwane z adresu URL, jeśli są zgodne z domyślnym numerem portu.

  • urlEquals

    ciąg znaków opcjonalny

    Pasuje, 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 są zgodne z domyślnym numerem 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 są zgodne z domyślnym numerem portu. Wyrażenia regularne korzystają ze składni RE2.

  • urlPrefix

    ciąg znaków opcjonalny

    Pasuje, jeśli adres URL (bez identyfikatora fragmentu) zaczyna się od określonego ciągu znaków. Numery portów są usuwane z adresu URL, jeśli są zgodne z domyślnym numerem portu.

  • urlSuffix

    ciąg znaków opcjonalny

    Dopasowuje adres URL (bez identyfikatora fragmentu), który kończy się określonym ciągiem. Numery portów są usuwane z adresu URL, jeśli są zgodne z domyślnym numerem portu.