webRequest.handlerBehaviorChanged()
Diese Funktion kann verwendet werden, um sicherzustellen, dass Event-Listener korrekt angewendet werden, wenn Seiten im In-Memory-Cache des Browsers sind. Wenn der Browser eine Seite geladen hat und die Seite erneut geladen wird, kann der Browser die Seite aus seinem In-Memory-Cache neu laden, und in diesem Fall werden keine Ereignisse für die Anforderung ausgelöst.
Angenommen, die Aufgabe einer Erweiterung besteht darin, Webanforderungen gegen ein Muster zu blockieren, und das folgende Szenario tritt ein:
- Der Benutzer lädt eine Seite, die eine bestimmte Anfrage enthält, und das Muster erlaubt die Anfrage.
- Die Ressource wird geladen und im Speicher zwischengespeichert.
- Die Muster der Erweiterung werden so aktualisiert, dass die Ressource nicht mehr erlaubt wäre.
- Der Benutzer lädt die Seite erneut.
Da die Seite aus dem Speicher-Cache neu geladen wird, wird der Listener möglicherweise nicht erneut aufgerufen, und die Anfrage wird trotz der neuen Richtlinie der Erweiterung geladen.
Die Funktion handlerBehaviorChanged()
ist dazu gedacht, dieses Problem zu lösen. Sie leert den In-Memory-Cache, damit Seitenneuladungen Event-Listener auslösen.
Da handlerBehaviorChanged()
den Cache leert, kann dies teuer und schlecht für die Leistung sein. Das webRequest-Modul definiert eine schreibgeschützte Eigenschaft MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES
: Wenn mehr als diese Anzahl von Aufrufen in 10 Minuten getätigt wird, hat dies keine Wirkung.
Die Implementierung des Cachings und damit die Notwendigkeit dieser Funktion variiert von einem Browser zum anderen, sodass diese Funktion in einigen Browsern nichts bewirkt.
Dies ist eine asynchrone Funktion, die ein Promise
zurückgibt.
Syntax
let flushingCache = browser.webRequest.handlerBehaviorChanged()
Parameter
Keine.
Rückgabewert
Ein Promise
, das ohne Argumente erfüllt wird, wenn die Operation abgeschlossen ist.
Beispiele
Im folgenden Beispiel leeren wir den In-Memory-Cache durch einen Aufruf von handlerBehaviorChanged()
und melden diese Aktion, indem wir eine entsprechende Nachricht in die Konsole protokollieren.
function onFlushed() {
console.log(`In-memory cache flushed`);
}
function onError(error) {
console.log(`Error: ${error}`);
}
let flushingCache = browser.webRequest.handlerBehaviorChanged();
flushingCache.then(onFlushed, onError);
Browser-Kompatibilität
Loading…
Hinweis:
Diese API basiert auf der chrome.webRequest
API von Chromium. Diese Dokumentation ist abgeleitet von web_request.json
im Chromium-Code.