proxy.onRequest
当 Web 请求即将发出时触发,使扩展有机会代理请求。
此事件紧密模仿了 webRequest
API 中定义的事件。 与这些事件类似,其 addListener()
函数接受三个参数
- 事件触发时调用的监听器。
- 一个
RequestFilter
对象,控制哪些请求会导致事件触发。 - 一个字符串数组,用于控制事件行为的其他方面。
事件在针对同一请求的任何 webRequest
事件之前触发。
当事件触发时,监听器将使用包含有关请求的信息的对象调用。 监听器返回一个 proxy.ProxyInfo
对象,表示要使用的代理(或 proxy.ProxyInfo
对象的数组,使浏览器能够在代理不可达时进行故障转移)。
要使用 proxy.onRequest
,扩展必须具有“代理” 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 的代理。如果在指定
proxy.ProxyInfo
对象时出现错误,则会调用proxy.onError
。 - 一个
过滤器
-
webRequest.RequestFilter
。 一组过滤器,用于限制发送到监听器的事件。 extraInfoSpec
可选-
string
的array
。 事件的额外选项。 传递"requestHeaders"
以在传递给监听器的details
对象中包含请求头。
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。
示例
此代码拦截对 <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>"],
});