A StreamFilter
is an object you can use to monitor and modify HTTP responses.
To create a StreamFilter
, call webRequest.filterResponseData()
, passing it the ID of the web request that you want to filter.
You can imagine the stream filter sitting between the networking stack and browser's rendering engine. The filter is passed HTTP response data as it is received from the network, and can examine and modify the data before passing it along to the rendering engine, where it will be parsed and rendered.
The filter generates four different events:
onstart
when the filter is about to start receiving response data.ondata
when some response data has been received by the filter and is available to be examined or modified.onstop
when the filter has finished receiving response data.onerror
if an error has occurred in initializing and operating the filter.You can listen to each event by assigning a listener function to its attribute:
filter.onstart = event => { console.log("started"); }
Note that the request is blocked during the execution of any event listeners.
The filter provides a write()
function. At any time from the onstart
event onwards you can use this function to write data to the output stream.
If you assign listeners to any of the filter's events, then all the response data passed to the rendering engine will be supplied through calls you make to write()
: so if you add a listener but don't call write()
, then the rendered page will be blank.
Once you have finished interacting with the response you call either of the following:
disconnect()
: This disconnects the filter from the request, so the rest of the response is processed normally.close()
: This closes the request, so no additional response data will be processed.The filter also provides functions to suspend()
and resume()
the request.
webRequest.StreamFilter.close()
webRequest.StreamFilter.disconnect()
webRequest.StreamFilter.resume()
webRequest.StreamFilter.suspend()
webRequest.StreamFilter.write()
webRequest.StreamFilter.ondata
webRequest.StreamFilter.onerror
webRequest.StreamFilter.onstart
webRequest.StreamFilter.onstop
webRequest.StreamFilter.error
webRequest.StreamFilter.onerror
is called, this will describe the error.webRequest.StreamFilter.status
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
StreamFilter |
No |
No |
57 |
? |
No |
No |
? |
? |
57 |
? |
? |
? |
close |
No |
No |
57 |
? |
No |
No |
? |
? |
57 |
? |
? |
? |
disconnect |
No |
No |
57 |
? |
No |
No |
? |
? |
57 |
? |
? |
? |
error |
No |
No |
57 |
? |
No |
No |
? |
? |
57 |
? |
? |
? |
ondata |
No |
No |
57 |
? |
No |
No |
? |
? |
57 |
? |
? |
? |
onerror |
No |
No |
57 |
? |
No |
No |
? |
? |
57 |
? |
? |
? |
onstart |
No |
No |
57 |
? |
No |
No |
? |
? |
57 |
? |
? |
? |
onstop |
No |
No |
57 |
? |
No |
No |
? |
? |
57 |
? |
? |
? |
resume |
No |
No |
57 |
? |
No |
No |
? |
? |
57 |
? |
? |
? |
status |
No |
No |
57 |
? |
No |
No |
? |
? |
57 |
? |
? |
? |
suspend |
No |
No |
57 |
? |
No |
No |
? |
? |
57 |
? |
? |
? |
write |
No |
No |
57 |
? |
No |
No |
? |
? |
57 |
? |
? |
? |
This code listens for onstart
, ondata
, and onstop
. It logs those events, and the response data as an ArrayBuffer
itself:
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"] );
© 2005–2021 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/StreamFilter