browser.events

Beschrijving

De namespace chrome.events bevat veelgebruikte typen die door API's worden ingezet om gebeurtenissen te verzenden en u te informeren wanneer er iets interessants gebeurt.

Concepten en gebruik

Een Event is een object waarmee je een melding kunt ontvangen wanneer er iets interessants gebeurt. Hier is een voorbeeld van het gebruik van de browser.alarms.onAlarm -gebeurtenis om een ​​melding te ontvangen wanneer een alarm is afgelopen:

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

Zoals het voorbeeld laat zien, registreer je je voor notificaties met behulp van addListener() . Het argument van addListener() is altijd een functie die je definieert om de gebeurtenis af te handelen, maar de parameters van de functie zijn afhankelijk van de gebeurtenis die je afhandelt. Als je de documentatie voor alarms.onAlarm bekijkt, zie je dat de functie één parameter heeft: een alarms.Alarm object met details over het verlopen alarm.

Voorbeelden van API's die gebruikmaken van gebeurtenissen: alarmen , i18n , identiteit , runtime . De meeste Chrome-API's doen dat.

Declaratieve gebeurtenisafhandelaars

Declaratieve gebeurtenisafhandelaars bieden een manier om regels te definiëren die bestaan ​​uit declaratieve voorwaarden en acties. Voorwaarden worden in de browser geëvalueerd in plaats van in de JavaScript-engine, wat de latentie vermindert en een zeer hoge efficiëntie mogelijk maakt.

Declaratieve gebeurtenisafhandelaars worden bijvoorbeeld gebruikt in de Declarative Content API . Deze pagina beschrijft de onderliggende concepten van alle declaratieve gebeurtenisafhandelaars.

Regels

De eenvoudigst mogelijke regel bestaat uit een of meer voorwaarden en een of meer handelingen:

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

Als aan een van de voorwaarden is voldaan, worden alle acties uitgevoerd.

Naast voorwaarden en acties kunt u elke regel een identificatiecode geven, wat het verwijderen van eerder geregistreerde regels vereenvoudigt, en een prioriteit om de voorrang van regels te definiëren. Prioriteiten worden alleen in overweging genomen als regels met elkaar conflicteren of in een specifieke volgorde moeten worden uitgevoerd. Acties worden uitgevoerd in aflopende volgorde van de prioriteit van de bijbehorende regels.

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

Gebeurtenisobjecten

Gebeurtenisobjecten kunnen regels ondersteunen. Deze gebeurtenisobjecten roepen geen callbackfunctie aan wanneer er gebeurtenissen plaatsvinden, maar testen of een geregistreerde regel ten minste één vervulde voorwaarde heeft en voeren de acties uit die aan deze regel zijn gekoppeld. Gebeurtenisobjecten die de declaratieve API ondersteunen, hebben drie relevante methoden: events.Event.addRules() , events.Event.removeRules() en events.Event.getRules() .

Regels toevoegen

Om regels toe te voegen, roep je de functie addRules() van het `event`-object aan. Deze functie neemt een array met regelinstanties als eerste parameter en een callback-functie die na voltooiing wordt aangeroepen.

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

Als de regels succesvol zijn ingevoegd, bevat de parameter details een array met de ingevoegde regels in dezelfde volgorde als in de doorgegeven rule_list waarbij de optionele parameters id en priority zijn ingevuld met de gegenereerde waarden. Als een regel ongeldig is, bijvoorbeeld omdat deze een ongeldige voorwaarde of actie bevat, worden er geen regels toegevoegd en wordt de variabele `runtime.lastError` ingesteld wanneer de callbackfunctie wordt aangeroepen. Elke regel in rule_list moet een unieke identificatiecode bevatten die nog niet door een andere regel wordt gebruikt, of een lege identificatiecode.

Verwijder regels

Om regels te verwijderen, roep je de functie removeRules() aan. Deze functie accepteert een optionele array met regel-ID's als eerste parameter en een callback-functie als tweede parameter.

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

Als rule_ids een array van identificatoren is, worden alle regels met identificatoren uit de array verwijderd. Als rule_ids een onbekende identificator bevat, wordt deze identificator stilzwijgend genegeerd. Als rule_ids undefined is, worden alle geregistreerde regels van deze extensie verwijderd. De functie callback() wordt aangeroepen wanneer de regels zijn verwijderd.

Regels ophalen

Om een ​​lijst met geregistreerde regels op te halen, roept u de functie getRules() aan. Deze functie accepteert een optionele array met regel-ID's met dezelfde semantiek als removeRules() en een callback-functie.

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

De parameter details ' die aan de callback() functie wordt doorgegeven, verwijst naar een array van regels, inclusief ingevulde optionele parameters.

Prestatie

Om maximale prestaties te bereiken, dient u de volgende richtlijnen in acht te nemen.

Regels kunnen in bulk worden geregistreerd en gederegistreerd. Na elke registratie of deregistratie moet Chrome de interne datastructuren bijwerken. Deze update is een kostbare bewerking.

In plaats van
const rule1 = {...};
const rule2 = {...};
browser.declarativeWebRequest.onRequest.addRules([rule1]);
browser.declarativeWebRequest.onRequest.addRules([rule2]);
De voorkeur geven aan
const rule1 = {...};
const rule2 = {...};
browser.declarativeWebRequest.onRequest.addRules([rule1, rule2]);

Geef de voorkeur aan het matchen van subtekenreeksen boven reguliere expressies in een events.UrlFilter . Matchen op basis van subtekenreeksen is extreem snel.

In plaats van
const match = new browser.declarativeWebRequest.RequestMatcher({
  url: {urlMatches: "example.com/[^?]*foo" }
});
De voorkeur geven aan
const match = new browser.declarativeWebRequest.RequestMatcher({
  url: {hostSuffix: "example.com", pathContains: "foo"}
});

Als er veel regels zijn die dezelfde acties delen, voeg ze dan samen tot één regel. Regels activeren hun acties zodra aan één enkele voorwaarde is voldaan. Dit versnelt het matchen en vermindert het geheugenverbruik voor dubbele actiesets.

In plaats van
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]);
De voorkeur geven aan
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]);

Gefilterde evenementen

Gefilterde gebeurtenissen zijn een mechanisme waarmee luisteraars een subset van gebeurtenissen kunnen specificeren waarin ze geïnteresseerd zijn. Een luisteraar die een filter gebruikt, wordt niet aangeroepen voor gebeurtenissen die niet aan het filter voldoen, waardoor de luistercode declaratiever en efficiënter wordt. Een service worker hoeft niet te worden gewekt om gebeurtenissen af ​​te handelen waar hij geen interesse in heeft.

Gefilterde gebeurtenissen zijn bedoeld om de overgang van handmatige filtercode mogelijk te maken.

In plaats van
browser.webNavigation.onCommitted.addListener((event) => {
  if (hasHostSuffix(event.url, 'google.com') ||
      hasHostSuffix(event.url, 'google.com.au')) {
    // ...
  }
});
De voorkeur geven aan
browser.webNavigation.onCommitted.addListener((event) => {
  // ...
}, {url: [{hostSuffix: 'google.com'},
          {hostSuffix: 'google.com.au'}]});

Voor bepaalde gebeurtenissen zijn specifieke filters beschikbaar die relevant zijn voor die gebeurtenis. De lijst met filters die een gebeurtenis ondersteunt, staat vermeld in de documentatie van die gebeurtenis in de sectie 'filters'.

Bij het matchen van URL's (zoals in het bovenstaande voorbeeld) ondersteunen gebeurtenisfilters dezelfde mogelijkheden voor URL-matching als die welke kunnen worden uitgedrukt met een events.UrlFilter , met uitzondering van het matchen van schema en poort.

Soorten

Event

Een object waarmee luisteraars voor een Chrome-gebeurtenis kunnen worden toegevoegd en verwijderd.

Eigenschappen

  • addListener

    leegte

    Registreert een callback-functie voor een gebeurtenis.

    De addListener functie ziet er als volgt uit:

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

    • terugbelverzoek

      H

      Deze functie wordt aangeroepen wanneer een gebeurtenis plaatsvindt. De parameters van deze functie zijn afhankelijk van het type gebeurtenis.

  • addRules

    leegte

    Registreert regels voor het afhandelen van gebeurtenissen.

    De functie addRules ziet er als volgt uit:

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

    • regels

      Regel <anyany>[]

      Regels die geregistreerd moeten worden. Deze vervangen niet de eerder geregistreerde regels.

    • terugbelverzoek

      functie optioneel

      De callback parameter ziet er als volgt uit:

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

      • regels

        Regel <anyany>[]

        Bij de geregistreerde regels worden de optionele parameters met waarden ingevuld.

  • getRules

    leegte

    Retourneert de momenteel geregistreerde regels.

    De functie getRules ziet er als volgt uit:

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

    • regelidentificaties

      string[] optioneel

      Als een array wordt doorgegeven, worden alleen regels geretourneerd waarvan de identificatoren in die array voorkomen.

    • terugbelverzoek

      functie

      De callback parameter ziet er als volgt uit:

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

      • regels

        Regel <anyany>[]

        Bij de geregistreerde regels worden de optionele parameters met waarden ingevuld.

  • heeftLuisteraar

    leegte

    De hasListener functie ziet er als volgt uit:

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

    • terugbelverzoek

      H

      Luisteraar wiens registratiestatus gecontroleerd moet worden.

    • retourneert

      booleaans

      Retourneert als de callbackfunctie is geregistreerd voor de gebeurtenis.

  • heeft Luisteraars

    leegte

    De hasListeners functie ziet er als volgt uit:

    () => {...}

    • retourneert

      booleaans

      Dit is waar als er deelnemers voor het evenement geregistreerd staan.

  • removeListener

    leegte

    Hiermee wordt een callback-functie van een gebeurtenislistener van een gebeurtenis verwijderd.

    De functie removeListener ziet er als volgt uit:

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

    • terugbelverzoek

      H

      Luisteraar die niet geregistreerd hoeft te zijn.

  • verwijderRegels

    leegte

    De huidige regels worden uit het register verwijderd.

    De functie removeRules ziet er als volgt uit:

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

    • regelidentificaties

      string[] optioneel

      Als een array wordt doorgegeven, worden alleen regels met identificaties die in die array voorkomen, afgemeld.

    • terugbelverzoek

      functie optioneel

      De callback parameter ziet er als volgt uit:

      () => void

Rule

Beschrijving van een declaratieve regel voor het afhandelen van gebeurtenissen.

Eigenschappen

  • acties

    elk[]

    Lijst met acties die worden uitgevoerd als aan een van de voorwaarden is voldaan.

  • voorwaarden

    elk[]

    Lijst met voorwaarden die de acties kunnen activeren.

  • id

    string optioneel

    Optionele identificatiecode waarmee naar deze regel kan worden verwezen.

  • prioriteit

    nummer optioneel

    Optionele prioriteit van deze regel. Standaardwaarde is 100.

  • tags

    string[] optioneel

    Tags kunnen worden gebruikt om regels te annoteren en bewerkingen uit te voeren op sets van regels.

UrlFilter

Hiermee kunt u URL's filteren op basis van verschillende criteria. Zie gebeurtenisfiltering . Alle criteria zijn hoofdlettergevoelig.

Eigenschappen

  • cidrBlocks

    string[] optioneel

    Chrome 123+

    Komt overeen als het hostgedeelte van de URL een IP-adres is en zich bevindt in een van de CIDR-blokken die in de array zijn opgegeven.

  • hostBevat

    string optioneel

    Deze query komt overeen als de hostnaam van de URL een opgegeven tekenreeks bevat. Om te testen of een hostnaamcomponent het voorvoegsel 'foo' heeft, gebruikt u `hostContains: '.foo'`. Dit komt overeen met 'www.foobar.com' en 'foo.com', omdat er impliciet een punt aan het begin van de hostnaam wordt toegevoegd. `hostContains` kan ook worden gebruikt om te matchen met componentachtervoegsel ('foo.') en om exact te matchen met componenten ('.foo.'). Voor de laatste componenten moet apart worden gematcht op achtervoegsel en exact, met behulp van `hostSuffix`, omdat er geen impliciete punt aan het einde van de hostnaam wordt toegevoegd.

  • hostEquals

    string optioneel

    Komt overeen als de hostnaam van de URL gelijk is aan een opgegeven tekenreeks.

  • hostPrefix

    string optioneel

    Komt overeen als de hostnaam van de URL begint met een opgegeven tekenreeks.

  • hostSuffix

    string optioneel

    Komt overeen als de hostnaam van de URL eindigt op een opgegeven tekenreeks.

  • oorsprongEnPadKomtOvereenkomsten

    string optioneel

    Er wordt een match gevonden als de URL, zonder querysegment en fragment-ID, overeenkomt met een opgegeven reguliere expressie. Poortnummers worden uit de URL verwijderd als ze overeenkomen met het standaardpoortnummer. De reguliere expressies gebruiken de RE2-syntaxis .

  • padBevat

    string optioneel

    Komt overeen als het padsegment van de URL een opgegeven tekenreeks bevat.

  • padEquals

    string optioneel

    Komt overeen als het padgedeelte van de URL gelijk is aan een opgegeven tekenreeks.

  • padVoorvoegsel

    string optioneel

    Komt overeen als het padsegment van de URL begint met een opgegeven tekenreeks.

  • padachtervoegsel

    string optioneel

    Komt overeen als het padsegment van de URL eindigt met een opgegeven tekenreeks.

  • havens

    (nummer | nummer[])[] optioneel

    Komt overeen als de poort van de URL voorkomt in een van de opgegeven poortlijsten. Bijvoorbeeld [80, 443, [1000, 1200]] komt overeen met alle verzoeken op poort 80, 443 en in het bereik 1000-1200.

  • queryContains

    string optioneel

    Komt overeen als het querygedeelte van de URL een opgegeven tekenreeks bevat.

  • queryEquals

    string optioneel

    Komt overeen als het querygedeelte van de URL gelijk is aan een opgegeven tekenreeks.

  • queryPrefix

    string optioneel

    Komt overeen als het querygedeelte van de URL begint met een opgegeven tekenreeks.

  • querySuffix

    string optioneel

    Komt overeen als het querygedeelte van de URL eindigt met een opgegeven tekenreeks.

  • plannen

    string[] optioneel

    Komt overeen als het schema van de URL gelijk is aan een van de schema's die in de array zijn opgegeven.

  • urlBevat

    string optioneel

    Komt overeen als de URL (zonder fragment-ID) een opgegeven tekenreeks bevat. Poortnummers worden uit de URL verwijderd als ze overeenkomen met het standaardpoortnummer.

  • urlEquals

    string optioneel

    Komt overeen als de URL (zonder fragment-ID) gelijk is aan een opgegeven tekenreeks. Poortnummers worden uit de URL verwijderd als ze overeenkomen met het standaardpoortnummer.

  • urlMatches

    string optioneel

    Er wordt een match gevonden als de URL (zonder fragment-ID) overeenkomt met een opgegeven reguliere expressie. Poortnummers worden uit de URL verwijderd als ze overeenkomen met het standaardpoortnummer. De reguliere expressies gebruiken de RE2-syntaxis .

  • urlPrefix

    string optioneel

    Komt overeen als de URL (zonder fragment-ID) begint met een opgegeven tekenreeks. Poortnummers worden uit de URL verwijderd als ze overeenkomen met het standaardpoortnummer.

  • urlSuffix

    string optioneel

    Komt overeen als de URL (zonder fragment-ID) eindigt met een opgegeven tekenreeks. Poortnummers worden uit de URL verwijderd als ze overeenkomen met het standaardpoortnummer.