webRequest.StreamFilter
StreamFilter 是一个用于监视和修改 HTTP 响应的对象。
要创建 StreamFilter,请调用 webRequest.filterResponseData(),并传入您想要过滤的 web 请求的 ID。
您可以将流过滤器看作位于网络堆栈和浏览器渲染引擎之间。过滤器在从网络接收到 HTTP 响应数据时会收到这些数据。在将数据传递给用于解析和渲染的渲染引擎之前,它可以检查和修改数据。过滤器完全控制响应体,在没有监听器或写入调用时,默认行为是拥有一个没有内容且永不关闭的流。
过滤器会生成四种不同的事件:
onstart:当过滤器即将开始接收响应数据时触发。ondata:当过滤器接收到一部分响应数据并可供检查或修改时触发。onstop:当过滤器完成接收响应数据时触发。onerror:如果在初始化和操作过滤器时发生错误,则触发。
您可以通过为每个事件的属性分配一个监听器函数来监听它。
js
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-
描述流的当前状态。
示例
此代码监听 onstart、ondata 和 onstop。它会记录这些事件以及作为 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"],
);
浏览器兼容性
加载中…