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 with JavaScript enabled. Enable JavaScript to view data.

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