webRequest.onCompleted

当请求完成时触发。

此事件仅供信息参考。

语法

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

事件有三个函数

addListener(listener, filter, extraInfoSpec)

为该事件添加监听器。

removeListener(listener)

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

hasListener(listener)

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

addListener 语法

参数

listener

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

details

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

filter

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

extraInfoSpec 可选

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。故障转移超时(秒)。如果代理连接失败,则在此期间内不再使用该代理。

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

string 数组。请求的第一方的分类标志。

thirdParty

string 数组。请求或其窗口层次结构的第三方的分类标志。

分类标志包括

  • 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/en-US/"
200

or:

"https://mdn.org.cn/en-US/xfgkdkjdfhs"
404
*/
function logResponse(responseDetails) {
  console.log(responseDetails.url);
  console.log(responseDetails.statusCode);
}

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

扩展示例

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