webRequest.onResponseStarted

在收到响应主体中的第一个字节时触发。

此事件仅供参考。

语法

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

事件具有三个函数

addListener(listener, filter, extraInfoSpec)

为该事件添加监听器。

removeListener(listener)

停止监听此事件。listener 参数是要删除的监听器。

hasListener(listener)

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

addListener 语法

参数

listener

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

details

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

filter

webRequest.RequestFilter。限制发送到该监听器的事件的过滤器。

extraInfoSpec 可选

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

  • "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” 包含链接,用户单击该链接,则结果请求的 originUrl 为“https://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。如果代理将根据提供的 hostname 执行域名解析,则为 true,这意味着客户端不应该执行自己的 DNS 查询。

failoverTimeout

integer。故障转移超时,以秒为单位。如果代理连接失败,则在此期间内不再使用该代理。

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 表格仅在启用了 JavaScript 的浏览器中加载。

示例

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

/*
e.g.
"https://mdn.org.cn/en-US/Firefox/Releases"
200
HTTP/1.1 200 OK
*/
function logResponse(responseDetails) {
  console.log(responseDetails.url);
  console.log(responseDetails.statusCode);
  console.log(responseDetails.statusLine);
}

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

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