webRequest.onBeforeRedirect

当服务器发起的重定向即将发生时触发。

请注意,您不能为此事件传递“blocking”,因此您无法从此事件修改或取消请求:它仅供信息参考。

语法

js
browser.webRequest.onBeforeRedirect.addListener(
  listener,             // function
  filter,               //  object
  extraInfoSpec         //  optional array of strings
)
browser.webRequest.onBeforeRedirect.removeListener(listener)
browser.webRequest.onBeforeRedirect.hasListener(listener)

事件有三个函数

addListener(listener, filter, extraInfoSpec)

向此事件添加侦听器。

removeListener(listener)

停止侦听此事件。listener 参数是要移除的侦听器。

hasListener(listener)

检查是否为此事件注册了 listener。如果正在侦听,则返回 true,否则返回 false

addListener 语法

参数

listener

当此事件发生时调用的函数。该函数传递此参数

details

object。有关请求的详细信息。有关更多信息,请参阅details 部分。

filter

webRequest.RequestFilter。一个过滤器,用于限制发送到此侦听器的事件。

extraInfoSpec 可选

array of string。事件的额外选项。您可以只传递一个值

  • "responseHeaders":在传递给侦听器的 details 对象中包含 responseHeaders

其他对象

details

cookieStoreId

string。如果请求来自在上下文标识中打开的标签页,则为上下文标识的 cookie 存储 ID。有关更多信息,请参阅使用上下文标识

documentUrl

string。将加载资源的文档的 URL。例如,如果https://example.com 上的网页包含图像或 iframe,则图像或 iframe 的 documentUrl 将为https://example.com。对于顶级文档,documentUrl 未定义。

frameId

integer。如果请求发生在主框架中,则为零;正值是发生请求的子框架的 ID。如果(子)框架的文档已加载(typemain_framesub_frame),则 frameId 指示此框架的 ID,而不是外部框架的 ID。框架 ID 在一个标签页中是唯一的。

fromCache

boolean。指示此响应是否从磁盘缓存中获取。

incognito

boolean。请求是否来自隐私浏览窗口。

ip

string。发送请求的服务器的 IP 地址。它可能是一个文字 IPv6 地址。

method

string。标准 HTTP 方法:例如,“GET”或“POST”。

originUrl

string。触发请求的资源的 URL。例如,如果https://example.com 包含链接,并且用户单击该链接,则生成的请求的 originUrlhttps://example.com

originUrl 通常但并非总是与 documentUrl 相同。例如,如果页面包含 iframe,并且 iframe 包含加载新文档到 iframe 中的链接,则生成的请求的 documentUrl 将是 iframe 的父文档,但 originUrl 将是包含链接的 iframe 中文档的 URL。

parentFrameId

integer。包含发送请求的框架的框架的 ID。如果不存在父框架,则设置为 -1。

proxyInfo

object。此属性仅在请求被代理时存在。它包含以下属性

host

string。代理服务器的主机名。

port

integer。代理服务器的端口号。

type

string。代理服务器的类型。以下之一

  • "http":HTTP 代理(或 HTTPS 的 SSL CONNECT)
  • "https":通过 TLS 连接到代理的 HTTP 代理
  • "socks":SOCKS v5 代理
  • "socks4":SOCKS v4 代理
  • "direct":无代理
  • "unknown":未知代理
username

string。代理服务的用户名。

proxyDNS

boolean。如果代理将根据提供的主机名执行域名解析,则为 true,这意味着客户端不应执行自己的 DNS 查找。

failoverTimeout

integer。故障转移超时(秒)。如果代理连接失败,则在此期间不会再次使用该代理。

redirectUrl

string。新的 URL。

requestId

string。请求的 ID。请求 ID 在浏览器会话中是唯一的,因此您可以使用它们来关联与同一请求相关的不同事件。

responseHeaders

webRequest.HttpHeaders。与此重定向一起接收到的 HTTP 响应标头。

statusCode

integer。服务器返回的标准 HTTP 状态代码。

statusLine

string。响应的 HTTP 状态行或 HTTP/0.9 响应的“HTTP/0.9 200 OK”字符串(即缺少状态行的响应)或如果不存在标头则为空字符串。

tabId

integer。请求发生所在的标签页的 ID。如果请求与标签页无关,则设置为 -1。

thirdParty

boolean。指示请求及其内容窗口层次结构是否为第三方。

timeStamp

number。此事件触发的时间,以自纪元以来的毫秒数 为单位。

type

webRequest.ResourceType。正在请求的资源类型:例如,“image”、“script”、“stylesheet”。

url

string。请求的目标。

urlClassification

object。如果请求被Firefox 跟踪保护 分类,则与请求关联的跟踪类型。这是一个具有以下属性的对象

firstParty

array of strings。请求的第一方的分类标志。

thirdParty

array of strings。请求或其窗口层次结构的第三方的分类标志。

分类标志包括

  • fingerprintingfingerprinting_content:表示请求涉及指纹识别(“发现了一个进行指纹识别的来源”)。
    • fingerprinting 表示该域名属于指纹识别和追踪类别。此类域名的示例包括想要将个人资料与访问用户关联的广告商。
    • fingerprinting_content 表示该域名属于指纹识别类别,但不属于追踪类别。此类域名的示例包括使用指纹识别技术识别访问用户以进行反欺诈目的的支付提供商。
  • cryptominingcryptomining_content:类似于指纹识别类别,但用于加密货币挖矿资源。
  • trackingtracking_adtracking_analyticstracking_socialtracking_content:表示请求涉及追踪。tracking 是任何通用追踪请求,adanalyticssocialcontent 后缀标识追踪器的类型。
  • any_basic_tracking:一个元标记,组合了追踪和指纹识别标记,但不包括 tracking_contentfingerprinting_content
  • any_strict_tracking:一个元标记,组合了所有追踪和指纹识别标记。
  • any_social_tracking:一个元标记,组合了所有社交追踪标记。

浏览器兼容性

BCD 表格仅在浏览器中加载

示例

js
let target = "https://mdn.org.cn/*";

/*
e.g.
"https://mdn.org.cn/"
"https://mdn.org.cn/en-US/"
*/
function logResponse(responseDetails) {
  console.log(responseDetails.url);
  console.log(responseDetails.redirectUrl);
}

browser.webRequest.onBeforeRedirect.addListener(logResponse, {
  urls: [target],
});

注意:此 API 基于 Chromium 的 chrome.webRequest API。本文档源自 Chromium 代码中的 web_request.json