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"],
);
瀏覽器相容性
載入中…