webRequest.StreamFilter.onstop

当流没有更多要传递的数据时调用的事件处理器。在该事件处理器中,你仍然可以调用过滤器函数,例如 write()disconnect()close()

浏览器兼容性

示例

该示例会在响应中追加“额外的数据”:

js
function listener(details) {
  const filter = browser.webRequest.filterResponseData(details.requestId);
  const encoder = new TextEncoder();

  filter.ondata = (event) => {
    // 传递所有响应数据
    filter.write(event.data);
  };

  filter.onstop = (event) => {
    filter.write(encoder.encode("额外的数据"));
    filter.disconnect();
  };
}

browser.webRequest.onBeforeRequest.addListener(
  listener,
  { urls: ["https://example.com/*"], types: ["main_frame"] },
  ["blocking"],
);

上述示例也可以这样实现:

js
function listener(details) {
  const filter = browser.webRequest.filterResponseData(details.requestId);
  const encoder = new TextEncoder();

  const data = [];
  filter.ondata = (event) => {
    data.push(event.data);
  };

  filter.onstop = (event) => {
    for (const buffer of data) {
      filter.write(buffer);
    }
    filter.write(encoder.encode("额外的数据"));
    filter.close();
  };
}

browser.webRequest.onBeforeRequest.addListener(
  listener,
  { urls: ["https://example.com/"], types: ["main_frame"] },
  ["blocking"],
);