webRequest.StreamFilter
StreamFilter
是一个用于监视和修改 HTTP 响应的对象。
要创建 StreamFilter
,请调用 webRequest.filterResponseData()
,并传入要过滤的 Web 请求的 ID。
您可以将流过滤器视为网络堆栈和浏览器渲染引擎之间的桥梁。过滤器在从网络接收 HTTP 响应数据时会传递这些数据。它可以在将数据传递到渲染引擎(在该引擎中数据会被解析和渲染)之前检查和修改数据。过滤器可以完全控制响应主体,并且在没有监听器或写入调用的情况下,默认行为是拥有一个没有内容且永远不会关闭的流。
过滤器会生成四个不同的事件
onstart
,当过滤器即将开始接收响应数据时。ondata
,当过滤器接收到一些响应数据并且可以检查或修改这些数据时。onstop
,当过滤器完成接收响应数据时。onerror
,如果在初始化和操作过滤器时发生错误。
您可以通过为其属性分配监听器函数来监听每个事件
filter.onstart = (event) => {
console.log("started");
};
请注意,在任何事件监听器的执行期间,请求都会被阻塞。
过滤器提供了一个 write()
函数。从 onstart
事件开始的任何时间,您都可以使用此函数将数据写入输出流。
如果您为过滤器的任何事件分配了监听器,则传递到渲染引擎的所有响应数据都将通过您对 write()
的调用来提供。因此,如果您添加了一个监听器并且没有调用 write()
,则渲染的页面将为空白。
完成与响应的交互后,请调用以下任一操作
disconnect()
:这会断开过滤器与请求的连接,以便正常处理其余响应。close()
:这会关闭请求,因此不会处理其他响应数据。
方法
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
被调用时,这将描述错误。 webRequest.StreamFilter.status
-
描述流的当前状态。
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。
示例
此代码侦听 onstart
、ondata
和 onstop
。它记录这些事件,以及响应数据本身作为 ArrayBuffer
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"],
);