webRequest.StreamFilter

Ein StreamFilter ist ein Objekt, das Sie verwenden können, um HTTP-Antworten zu überwachen und zu modifizieren.

Um einen StreamFilter zu erstellen, rufen Sie webRequest.filterResponseData() auf und übergeben Sie die ID der Webanfrage, die Sie filtern möchten.

Sie können sich den Stream-Filter als eine Instanz vorstellen, die zwischen dem Netzwerk-Stack und der Rendering-Engine des Browsers sitzt. Der Filter erhält HTTP-Antwortdaten, während diese vom Netzwerk empfangen werden. Er kann die Daten untersuchen und modifizieren, bevor er sie an die Rendering-Engine weitergibt, wo sie analysiert und gerendert werden. Der Filter hat die volle Kontrolle über den Antwortkörper, und das Standardverhalten ohne jegliche Listener oder Schreibvorgänge ist ein Stream ohne Inhalt, der niemals endet.

Der Filter generiert vier verschiedene Ereignisse:

  • onstart wenn der Filter kurz davor steht, Antwortdaten zu empfangen.
  • ondata wenn einige Antwortdaten vom Filter empfangen wurden und zur Untersuchung oder Modifikation zur Verfügung stehen.
  • onstop wenn der Filter das Empfangen von Antwortdaten beendet hat.
  • onerror wenn ein Fehler beim Initialisieren und Betrieb des Filters aufgetreten ist.

Sie können auf jedes Ereignis lauschen, indem Sie eine Listener-Funktion seinem Attribut zuweisen:

js
filter.onstart = (event) => {
  console.log("started");
};

Beachten Sie, dass die Anfrage während der Ausführung eines Listener-Ereignisses blockiert ist.

Der Filter bietet die Funktion write(). Ab dem onstart-Ereignis können Sie diese Funktion verwenden, um Daten in den Ausgabestream zu schreiben.

Wenn Sie Listener zu einem der Filterereignisse hinzufügen, werden alle an die Rendering-Engine übergebenen Antwortdaten durch Aufrufe, die Sie an write() machen, bereitgestellt. Wenn Sie also einen Listener hinzufügen und write() nicht aufrufen, bleibt die gerenderte Seite leer.

Sobald Sie die Interaktion mit der Antwort abgeschlossen haben, rufen Sie eine der folgenden Funktionen auf:

  • disconnect(): Trennt den Filter von der Anfrage, sodass der Rest der Antwort normal verarbeitet wird.
  • close(): Schließt die Anfrage, sodass keine zusätzlichen Antwortdaten verarbeitet werden.

Der Filter bietet auch Funktionen zum suspend() und resume(), um die Anfrage zu pausieren oder fortzusetzen.

Methoden

webRequest.StreamFilter.close()

Schließt die Anfrage.

webRequest.StreamFilter.disconnect()

Trennt den Filter von der Anfrage.

webRequest.StreamFilter.resume()

Setzt die Verarbeitung der Anfrage fort.

webRequest.StreamFilter.suspend()

Pausiert die Verarbeitung der Anfrage.

webRequest.StreamFilter.write()

Schreibt einige Daten in den Ausgabestream.

Eigenschaften

webRequest.StreamFilter.ondata

Ereignishandler, der aufgerufen wird, wenn eingehende Daten verfügbar sind.

webRequest.StreamFilter.onerror

Ereignishandler, der aufgerufen wird, wenn ein Fehler aufgetreten ist.

webRequest.StreamFilter.onstart

Ereignishandler, der aufgerufen wird, wenn der Stream kurz davor ist, Daten zu empfangen.

webRequest.StreamFilter.onstop

Ereignishandler, der aufgerufen wird, wenn der Stream keine Daten mehr liefert und geschlossen wurde.

webRequest.StreamFilter.error

Wenn webRequest.StreamFilter.onerror aufgerufen wird, beschreibt dies den Fehler.

webRequest.StreamFilter.status

Beschreibt den aktuellen Status des Streams.

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Firefox for Android
Safari on iOS
StreamFilter
close
disconnect
error
ondata
onerror
onstart
onstop
resume
status
suspend
write

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support

Beispiele

Dieser Code lauscht auf onstart, ondata und onstop. Er protokolliert diese Ereignisse und die Antwortdaten selbst als ArrayBuffer:

js
function listener(details) {
  let filter = browser.webRequest.filterResponseData(details.requestId);

  filter.onstart = (event) => {
    console.log("started");
  };

  filter.ondata = (event) => {
    console.log(event.data);
    filter.write(event.data);
  };

  filter.onstop = (event) => {
    console.log("finished");
    filter.disconnect();
  };

  //return {}; // not needed
}

browser.webRequest.onBeforeRequest.addListener(
  listener,
  { urls: ["https://example.org/"], types: ["main_frame"] },
  ["blocking"],
);