proxy.onRequest
當一個 Web 請求即將發起時觸發,讓擴充套件有機會代理該請求。
此事件在很大程度上參照了 webRequest API 中定義的事件。與那些事件一樣,其 addListener() 函式接受三個引數:
- 當事件觸發時呼叫的偵聽器。
- 一個
RequestFilter物件,用於控制哪些請求會觸發事件。 - 一個字串陣列,用於控制事件行為的其他方面。
該事件在處理相同請求的任何 webRequest 事件之前觸發。
當事件觸發時,偵聽器會收到一個包含請求資訊的物件。偵聽器返回一個 proxy.ProxyInfo 物件,表示要使用的代理(或一個 proxy.ProxyInfo 物件陣列,允許瀏覽器在代理無法訪問時進行故障轉移)。預設情況下,除非返回 null 物件或以 null 物件結尾的陣列,否則請求將故障轉移到任何瀏覽器定義的代理。
要使用 proxy.onRequest,擴充套件必須擁有 "proxy" API 許可權,並且擁有其攔截的請求 URL 的 主機許可權,這意味著 filter 引數中的匹配模式必須是擴充套件主機許可權的子集。
語法
browser.proxy.onRequest.addListener(
listener, // function
filter, // object
extraInfoSpec // optional array of strings
)
browser.proxy.onRequest.removeListener(listener)
browser.proxy.onRequest.hasListener(listener)
事件有三個函式
addListener(listener, filter, extraInfoSpec)-
向此事件新增監聽器。
removeListener(listener)-
停止監聽此事件。
listener引數是要移除的偵聽器。 hasListener(listener)-
檢查
listener是否已為此事件註冊。如果正在監聽,則返回true,否則返回false。
addListener 語法
引數
監聽器-
此事件發生時呼叫的函式。該函式會接收一個引數,該引數是一個
proxy.RequestDetails物件,包含請求的詳細資訊。偵聽器可以返回以下任何一種:
- 一個
proxy.ProxyInfo物件。 - 一個
proxy.ProxyInfo物件陣列。 - 一個解析為
ProxyInfo物件的Promise。 - 一個解析為
ProxyInfo物件陣列的Promise。
當偵聽器返回一個數組或一個解析為陣列的 Promise 時,第一個物件之後的
ProxyInfo物件表示故障轉移。如果陣列中位置為 N 的代理在其ProxyInfo.failoverTimeout過期時不可訪問,則瀏覽器將嘗試位置為 N+1 的代理。預設情況下,除非返回
null物件或以null物件結尾的陣列([{ ... proxy info ...} , null]),否則請求將故障轉移到任何瀏覽器定義的代理。如果指定
proxy.ProxyInfo物件時發生錯誤,則會呼叫proxy.onError。 - 一個
filter-
webRequest.RequestFilter。一組過濾器,用於限制傳送到偵聽器的事件。 extraInfoSpec可選-
string的array。事件的附加選項。傳遞"requestHeaders"以在傳遞給偵聽器的details物件中包含請求頭。
示例
此程式碼會攔截對 <all_urls> 的請求,並在這些請求不是頂級框架的請求時對其進行代理。
function shouldProxyRequest(requestInfo) {
return requestInfo.parentFrameId !== -1;
}
function handleProxyRequest(requestInfo) {
if (shouldProxyRequest(requestInfo)) {
console.log(`Proxying: ${requestInfo.url}`);
return { type: "http", host: "127.0.0.1", port: 65535 };
}
return { type: "direct" };
}
browser.proxy.onRequest.addListener(handleProxyRequest, {
urls: ["<all_urls>"],
});
擴充套件程式示例
瀏覽器相容性
載入中…