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>"],
});
扩展程序示例
浏览器兼容性
加载中…