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.
const rule1 = {...}; const rule2 = {...}; browser.declarativeWebRequest.onRequest.addRules([rule1]); browser.declarativeWebRequest.onRequest.addRules([rule2]);
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.
const match = new browser.declarativeWebRequest.RequestMatcher({ url: {urlMatches: "example.com/[^?]*foo" } });
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.
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]);
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.
browser.webNavigation.onCommitted.addListener((event) => { if (hasHostSuffix(event.url, 'google.com') || hasHostSuffix(event.url, 'google.com.au')) { // ... } });
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
addListenerfunctie 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
addRulesziet er als volgt uit: [], callback?: function) => {...}(rules: Rule<anyany>
- regels
Regel <anyany>[]
Regels die geregistreerd moeten worden. Deze vervangen niet de eerder geregistreerde regels.
- terugbelverzoek
functie optioneel
De
callbackparameter ziet er als volgt uit: []) => void(rules: Rule<anyany>
- regels
Regel <anyany>[]
Bij de geregistreerde regels worden de optionele parameters met waarden ingevuld.
- getRules
leegte
Retourneert de momenteel geregistreerde regels.
De functie
getRulesziet 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
callbackparameter ziet er als volgt uit: []) => void(rules: Rule<anyany>
- regels
Regel <anyany>[]
Bij de geregistreerde regels worden de optionele parameters met waarden ingevuld.
- heeftLuisteraar
leegte
De
hasListenerfunctie 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
hasListenersfunctie 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
removeListenerziet 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
removeRulesziet 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
callbackparameter 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.