webRequest.StreamFilter

Un StreamFilter est un objet que vous pouvez utiliser pour surveiller et modifier les réponses HTTP.

Pour créer un StreamFilter, appelez webRequest.filterResponseData(), en lui passant l'ID de la requête web que vous voulez filtrer.

Vous pouvez imaginer le filtre de flux entre la pile réseau et le moteur de rendu du navigateur. Le filtre passe les données de réponse HTTP au fur et à mesure qu'il est reçu du réseau, et peut examiner et modifier les données avant de les transmettre au moteur de rendu, où elles seront analysées et rendues.

Le filtre génère quatre événements différents :

  • onstart lorsque le filtre est sur le point de commencer à recevoir les données de réponse.
  • ondata lorsque des données de réponse ont été reçues par le filtre et sont disponibles pour être examinées ou modifiées.
  • onstop lorsque le filtre a fini de recevoir les données de réponse.
  • onerror si une erreur s'est produite lors de l'initialisation et de l'utilisation du filtre.

Vous pouvez écouter chaque événement en assignant une fonction d'écoute à son attribut :

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

Notez que la demande est bloquée pendant l'exécution de n'importe quel auditeur d'événement.

Le filtre fournit une fonction write(). A tout moment à partir de l'événement onstart, vous pouvez utiliser cette fonction pour écrire des données dans le flux de sortie.

Si vous assignez des auditeurs à l'un des événements du filtre, alors toutes les données de réponse transmises au moteur de rendu seront fournies par les appels que vous faites pour write(): donc si vous ajoutez un auditeur mais n'appelez pas write(), alors la page rendue sera vide.

Une fois que vous avez terminé d'interagir avec la réponse, vous appelez l'un ou l'autre des éléments suivants :

  • disconnect() : Cela déconnecte le filtre de la requête, de sorte que le reste de la réponse est traité normalement.
  • close(): Cela met fin à la demande, de sorte qu'aucune donnée de réponse supplémentaire ne sera traitée.

Le filtre fournit également des fonctions à suspend() et resume() la requête.

Méthodes

webRequest.StreamFilter.close()

Ferme la demande.

webRequest.StreamFilter.disconnect()

Déconnecte le filtre de la requête.

webRequest.StreamFilter.resume()

Reprend le traitement de la demande.

webRequest.StreamFilter.suspend()

Suspend le traitement de la demande.

webRequest.StreamFilter.write()

Écrit quelques données dans le flux de sortie.

Propriétés

webRequest.StreamFilter.ondata

Gestionnaire d'événements qui est appelé lorsque les données entrantes sont disponibles.

webRequest.StreamFilter.onerror

Gestionnaire d'événements qui est appelé lorsqu'une erreur s'est produite.

webRequest.StreamFilter.onstart

Gestionnaire d'événements qui est appelé lorsque le flux est sur le point de commencer à recevoir des données.

webRequest.StreamFilter.onstop

Gestionnaire d'événements qui est appelé lorsque le flux n'a plus de données à livrer et qu'il s'est fermé.

webRequest.StreamFilter.error

Quand webRequest.StreamFilter.onerror est appelé, cela décrira l'erreur.

webRequest.StreamFilter.status

Décrit l'état actuel du flux.

Compatibilité des navigateurs

BCD tables only load in the browser

Exemples

Ce code écoute pour onstart, ondata et onstop. Il enregistre simplement ces événements et les données de réponse elles-mêmes :

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"],
);