说明
使用 chrome.webRequest
API 可观察和分析流量,以及拦截、阻止或修改传输中的请求。
权限
webRequest
您必须在扩展程序清单中声明 "webRequest"
权限,才能使用 Web 请求
API 以及必要的主机权限。要拦截子资源请求,
扩展程序必须同时有权访问请求的网址及其发起者。例如:
{
"name": "My extension",
...
"permissions": [
"webRequest"
],
"host_permissions": [
"*://*.google.com/*"
],
...
}
webRequestBlocking
必须填写此字段,才能注册屏蔽事件处理脚本。从 Manifest V3 开始, 适用于通过政策安装的扩展程序
webRequestAuthProvider
使用 onAuthRequired
方法的必需条件。请参阅
处理身份验证。
概念和用法
请求的生命周期
Web 请求 API 定义了一组遵循 Web 请求生命周期的事件。您可以使用 来观察和分析流量。某些同步事件允许您拦截、 屏蔽或修改请求
成功请求的事件生命周期如下所示,其后是事件定义:
onBeforeRequest
(可选同步)- 在请求即将发生时触发。此事件在建立任何 TCP 连接之前发送,可以 用于取消或重定向请求。
onBeforeSendHeaders
(可选同步)- 在请求即将发生且初始标头准备就绪时触发。该事件为
旨在允许扩展程序添加、修改和删除请求标头 (*)。通过
onBeforeSendHeaders
事件传递到所有订阅者,因此不同的订阅者可能会尝试 修改请求;请参阅实现详情部分,了解具体方法。此活动 可用于取消请求。 onSendHeaders
- 在所有扩展程序都有机会修改请求标头后触发,并显示最终版本 (*) 版本。该事件在标头发送到广告网络之前触发。此活动是 信息丰富,并异步处理。不允许修改或取消请求。
onHeadersReceived
(可选同步)- 每次收到 HTTP(S) 响应标头时触发。由于重定向和身份验证的原因 请求,每个请求可能会发生多次请求此事件旨在让扩展程序 添加、修改和删除响应标头,例如传入的 Content-Type 标头。缓存 指令会在此事件触发之前进行处理,因此修改 Cache-Control 等标头 对浏览器的缓存没有影响。还可以取消或重定向请求。
onAuthRequired
(可选同步)- 在请求需要对用户进行身份验证时触发。该事件可以同步处理, 提供身份验证凭据。请注意,扩展程序可能会提供无效的凭据。照顾好自己 避免因反复提供无效凭据而进入无限循环。这也可用于 取消请求。
onBeforeRedirect
- 即将执行重定向时触发。重定向可由 HTTP 响应触发 代码或扩展程序此事件提供信息,并会异步处理。不允许 以修改或取消请求。
onResponseStarted
- 收到响应正文的第一个字节时触发。对于 HTTP 请求,这意味着 提供状态行和响应标头。此活动仅供参考,且已处理 异步执行。不允许修改或取消请求。
onCompleted
- 成功处理请求时触发。
onErrorOccurred
- 无法成功处理请求时触发。
Web 请求 API 可保证对于每个请求,onCompleted
或 onErrorOccurred
作为最终事件触发,但有一个例外情况:如果请求被重定向到data://
网址,
onBeforeRedirect
是最后报告的事件。
* 请注意,网络请求 API 将网络堆栈的抽象呈现给扩展程序。 在内部,一个网址请求可拆分为多个 HTTP 请求(例如,抓取单个网址) 字节范围),也可以由网络堆栈处理,无需与 。因此,API 不会提供发送到 。例如,与缓存相关的所有标头对扩展程序来说都是不可见的。
以下标头目前未提供给 onBeforeSendHeaders
事件。此列表
。
- 授权
- Cache-Control
- 连接
- 内容长度
- 主机
- If-Modified-Since
- If-None-Match
- If 范围
- 部分数据
- 普拉格玛
- 代理授权
- 代理连接
- Transfer-Encoding
从 Chrome 79 开始,请求标头修改会影响跨域资源共享 (CORS)
检查。如果经过修改的跨源请求的标头不符合标准,则会导致
发送 CORS 预检,以询问服务器是否可以接受此类标头。如果您确实需要
以违反 CORS 协议的方式修改标头,则需要在'extraHeaders'
opt_extraInfoSpec
。另一方面,修改响应标头不会欺骗 CORS
检查。如果您需要欺骗 CORS 协议,则还需要为'extraHeaders'
响应修改。
从 Chrome 79 开始,webRequest API 不会拦截 CORS 预检请求并且
响应。如果存在针对某个请求网址的 CORS 预检,
在 opt_extraInfoSpec
中为请求网址指定了 'extraHeaders'
的监听器。
onBeforeRequest
也可从 Chrome 79 中获取 'extraHeaders'
。
从 Chrome 79 开始,不提供以下请求标头,且无法修改或
在 opt_extraInfoSpec
中未指定 'extraHeaders'
的情况下移除了:
- 来源
从 Chrome 72 开始,如果您需要在跨源读取屏蔽之前修改响应
(CORB) 可以阻止响应,则需要在 opt_extraInfoSpec
中指定 'extraHeaders'
。
从 Chrome 72 开始,不提供以下请求标头,且无法修改
或在 opt_extraInfoSpec
中未指定 'extraHeaders'
的情况下将其移除:
- 接受-语言
- Accept-Encoding
- Referer
- Cookie
从 Chrome 72 开始,Set-Cookie
响应标头未提供,且无法修改
或是在 opt_extraInfoSpec
中未指定 'extraHeaders'
的情况下移除的。
从 Chrome 89 开始,X-Frame-Options
响应标头将无法有效修改
或在 opt_extraInfoSpec
中未指定 'extraHeaders'
的情况下将其移除。
给定其主机,webRequest API 仅会公开该扩展程序有权查看的请求。
权限。此外,只能使用以下架构:http://
、https://
、
ftp://
、file://
、ws://
(自 Chrome 58 起)、wss://
(自 Chrome 58 起)、urn:
(自 Chrome 91 起)或
chrome-extension://
。此外,即使某些请求包含使用上述某种架构的网址,
已隐藏。其中包括chrome-extension://other_extension_id
,其中other_extension_id
不是
用于处理请求的扩展程序的 ID、https://www.google.com/chrome
和
请求核心的浏览器功能。此外,来自扩展程序的同步 XMLHttpRequests
而阻止事件处理脚本,从而防止死锁。请注意,对于某些
可用的事件集可能会因
相应的协议例如,对于 scheme 文件,只能使用 onBeforeRequest
,
可以分派 onResponseStarted
、onCompleted
和 onErrorOccurred
。
从 Chrome 58 开始,webRequest API 支持拦截 WebSocket 握手请求。 由于握手是通过 HTTP 升级请求完成的,因此其流程适合面向 HTTP 的 webRequest 模型中。请注意,API 不会拦截:
- 通过已建立的 WebSocket 连接发送的单条消息。
- WebSocket 正在关闭连接。
WebSocket 请求不支持重定向。
从 Chrome 72 开始,仅当请求具有主机时,扩展程序才能拦截请求 对请求的网址和请求发起者的权限。
从 Chrome 96 开始,webRequest API 支持拦截通过 HTTP/3 传输的 WebTransport 握手请求。由于握手是通过 HTTP CONNECT 请求完成的,因此其流程 面向 HTTP 的 webRequest 模型请注意:
- 会话建立后,扩展程序将无法通过 webRequest API。
- 系统会忽略对
onBeforeSendHeaders
中的 HTTP 请求标头的修改。 - WebTransport over HTTP/3 不支持重定向和身份验证。
请求 ID
每个请求都由一个请求 ID 标识。此 ID 在浏览器会话中是唯一的, 扩展的上下文。它在请求的生命周期内保持不变, 来匹配同一请求的事件。请注意,多个 HTTP 请求会映射到 请求响应时间(如果发生 HTTP 重定向或 HTTP 身份验证)。
注册事件监听器
要为网络请求注册事件监听器,您可以使用常规 addListener()
函数。除了指定回调函数外,您还必须指定过滤器参数,并且可以指定可选的 extra info 参数。
网络请求 API 的 addListener()
的三个参数具有以下定义:
var callback = function(details) {...};
var filter = {...};
var opt_extraInfoSpec = [...];
以下是监听 onBeforeRequest
事件的示例:
chrome.webRequest.onBeforeRequest.addListener(
callback, filter, opt_extraInfoSpec);
每个 addListener()
调用都接受一个强制性的回调函数作为第一个参数。此回调
函数即可传递包含当前网址请求相关信息的字典。通过
取决于具体的事件类型以及内容
opt_extraInfoSpec
。
如果可选的 opt_extraInfoSpec
数组包含字符串 'blocking'
(仅允许
事件),系统会同步处理回调函数。这意味着该请求是
直至回调函数返回。在这种情况下,回调可以返回一个
webRequest.BlockingResponse
,用于确定请求的更深生命周期。取决于
此响应允许取消或重定向请求 (onBeforeRequest
),
取消请求或修改标头(onBeforeSendHeaders
、onHeadersReceived
),以及
取消请求或提供身份验证凭据 (onAuthRequired
)。
如果可选的 opt_extraInfoSpec
数组包含字符串 'asyncBlocking'
(只有
允许 onAuthRequired
内使用),该扩展程序可以生成 webRequest.BlockingResponse
异步执行。
借助 webRequest.RequestFilter
filter
,您可以限制对于哪些请求,哪些事件属于
在不同维度中触发:
- 网址
- 网址格式,例如
*://www.google.com/foo*bar
。 - 类型
- 请求类型,例如
main_frame
(为顶级帧加载的文档)、sub_frame
( 为嵌入式框架加载的文档)和image
(网站上的图片)。请参阅webRequest.RequestFilter
。 - 标签 ID
- 一个标签页的标识符。
- 窗口 ID
- 窗口的标识符。
根据事件类型,您可以在 opt_extraInfoSpec
中指定字符串以请求额外的
请求的相关信息这仅用于提供有关请求数据的详细信息
(如果明确请求)。
处理身份验证
如需处理 HTTP 身份验证请求,请添加 "webRequestAuthProvider"
对清单文件的权限:
{
"permissions": [
"webRequest",
"webRequestAuthProvider"
]
}
请注意,如果扩展程序通过政策安装,则不需要此权限
"webRequestBlocking"
权限。
如需同步提供凭据,请执行以下操作:
chrome.webRequest.onAuthRequired.addListener((details) => {
return {
authCredentials: {
username: 'guest',
password: 'guest'
}
};
},
{ urls: ['https://httpbin.org/basic-auth/guest/guest'] },
['blocking']
);
如需异步提供凭据,请执行以下操作:
chrome.webRequest.onAuthRequired.addListener((details, callback) => {
callback({
authCredentials: {
username: 'guest',
password: 'guest'
}
});
},
{ urls: ['https://httpbin.org/basic-auth/guest/guest'] },
['asyncBlocking']
);
实现细节
在开发使用 网络请求 API:
web_accessible_resources
当扩展程序使用 webRequest API 将公开资源请求重定向到不可通过网络访问的资源时,该请求会被屏蔽并导致错误。即使无法通过网络访问的资源归重定向扩展程序所有,上述情况也适用。如需声明与 declarativeWebRequest API 搭配使用的资源,必须在清单中声明并填充 "web_accessible_resources"
数组,如此处所述。
冲突解决
在 Web 请求 API 的当前实现中,如果
至少一个扩展程序指示取消该请求。如果扩展程序取消了请求
扩展程序会收到 onErrorOccurred
事件通知。只有一个扩展程序可以将
每次请求或修改一个标头。如果有多个扩展程序尝试修改请求,
选择最新安装的扩展程序,并忽略其他所有扩展程序。出现以下情况时,相应扩展程序不会收到通知
其修改或重定向指令已被忽略。
缓存
Chrome 浏览器采用了两种缓存:一种是磁盘缓存,另一种是非常快的内存中缓存。一个 Pod 的生命周期
内存中的缓存与渲染进程的生命周期相关联,该生命周期大致对应于标签页。
从内存缓存应答的请求对网络请求 API 不可见。如果
请求处理程序会更改其行为(例如,根据
被屏蔽),简单的网页刷新可能不会遵循这种更改后的行为。为了确保
更改成功后,调用 handlerBehaviorChanged()
以清空内存缓存。但请不要这样做
频率清除缓存是一项成本非常高的操作。您无需致电
在注册或取消注册事件监听器后返回 handlerBehaviorChanged()
。
时间戳
网络请求事件的 timestamp
属性只能保证内部一致。
将一个事件与另一个事件进行比较,可以得出事件之间的正确偏移量,
转换为扩展程序中的当前时间(例如通过 (new Date()).getTime()
)
无法预料到的结果。
错误处理
如果您尝试使用无效参数注册事件,则会抛出 JavaScript 错误,并且 该事件处理脚本将不会被注册。如果在处理事件时抛出错误, 事件处理脚本返回无效的阻止响应,则系统会在扩展程序的 并且会针对该请求忽略处理程序。
示例
以下示例说明了如何阻止对 www.evil.com
的所有请求:
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
return {cancel: details.url.indexOf("://www.evil.com/") != -1};
},
{urls: ["<all_urls>"]},
["blocking"]
);
由于此函数使用阻塞事件处理脚本,因此需要 "webRequest"
以及
"webRequestBlocking"
权限。
以下示例以更高效的方式实现了相同的目标,因为非
目标 www.evil.com
无需传递给扩展程序:
chrome.webRequest.onBeforeRequest.addListener(
function(details) { return {cancel: true}; },
{urls: ["*://www.evil.com/*"]},
["blocking"]
);
以下示例说明了如何从所有请求中删除 User-Agent 标头:
chrome.webRequest.onBeforeSendHeaders.addListener(
function(details) {
for (var i = 0; i < details.requestHeaders.length; ++i) {
if (details.requestHeaders[i].name === 'User-Agent') {
details.requestHeaders.splice(i, 1);
break;
}
}
return {requestHeaders: details.requestHeaders};
},
{urls: ["<all_urls>"]},
["blocking", "requestHeaders"]
);
如需试用 chrome.webRequest
API,请执行以下操作:
安装 chrome-extension-samples 中的 webRequest 示例
存储库
类型
BlockingResponse
返回具有“阻塞”状态的事件处理程序的值。已应用 extraInfoSpec。允许事件处理程序修改网络请求。
属性
-
authCredentials
对象(可选)
仅用于响应 onAuthRequired 事件。如果设置了此字段,系统会使用提供的凭据发出请求。
-
密码
字符串
-
username
字符串
-
-
取消
布尔值(可选)
如果为 true,则取消该请求。这样可以阻止发送请求。这可用作对 onBeforeRequest、onBeforeSendHeaders、onHeadersReceived 和 onAuthRequired 事件的响应。
-
redirectUrl
字符串(可选)
仅用于响应 onBeforeRequest 和 onHeadersReceived 事件。如果设置了此字段,系统会阻止发送/完成原始请求,改为重定向到指定网址。允许重定向到非 HTTP 架构(例如
data:
)。由重定向操作发起的重定向会使用重定向的原始请求方法,但有一个例外:如果重定向是在 onHeadersReceived 阶段发起的,则系统将使用 GET 方法发出重定向。来自采用ws://
和wss://
架构的网址的重定向会被忽略。 -
requestHeaders
HttpHeaders 可选
仅用于响应 onBeforeSendHeaders 事件。如果设置了此字段,则会改为使用这些请求标头发出请求。
-
responseHeaders
HttpHeaders 可选
仅用作对 onHeadersReceived 事件的响应。如果设置了此字段,则假定服务器已使用这些响应标头进行响应。只有在您确实想修改标头以减少冲突数量时,才返回
responseHeaders
(只有一个扩展程序可以为每个请求修改responseHeaders
)。
FormDataItem
包含在表单数据中传递的数据。对于网址编码形式,如果数据为 utf-8 字符串,则存储为字符串;否则存储为 ArrayBuffer。对于表单数据,则为 ArrayBuffer。如果 form-data 表示上传文件,则它是带有文件名的字符串(如果提供了文件名)。
枚举
数组缓冲区
字符串
HttpHeaders
HTTP 标头数组。每个标头都表示为一个字典,其中包含键 name
和 value
或 binaryValue
。
类型
object[]
属性
-
binaryValue
number[](选填)
如果无法用 UTF-8 表示的 HTTP 标头的值,则存储为各个字节值 (0..255)。
-
name
字符串
HTTP 标头的名称。
-
值
字符串(可选)
HTTP 标头的值(如果可以由 UTF-8 表示)。
IgnoredActionType
枚举
"重定向"
"request_headers"
"response_headers"
"auth_credentials"
OnAuthRequiredOptions
枚举
"responseHeaders"
指定事件中应包含响应标头。
"blocking"
指定在回调函数返回之前阻塞请求。
"asyncBlocking"
指定异步处理回调函数。
"extraHeaders"
指定标头可能违反跨源资源共享 (CORS)。
OnBeforeRedirectOptions
枚举
"responseHeaders"
指定事件中应包含响应标头。
"extraHeaders"
指定标头可能违反跨源资源共享 (CORS)。
OnBeforeRequestOptions
枚举
"blocking"
指定在回调函数返回之前阻塞请求。
"requestBody"
指定事件中应包含请求正文。
"extraHeaders"
指定标头可能违反跨源资源共享 (CORS)。
OnBeforeSendHeadersOptions
枚举
"requestHeaders"
指定事件中应包含请求标头。
"blocking"
指定在回调函数返回之前阻塞请求。
"extraHeaders"
指定标头可能违反跨源资源共享 (CORS)。
OnCompletedOptions
枚举
"responseHeaders"
指定事件中应包含响应标头。
"extraHeaders"
指定标头可能违反跨源资源共享 (CORS)。
OnErrorOccurredOptions
值
“extraHeaders”
OnHeadersReceivedOptions
枚举
"blocking"
指定在回调函数返回之前阻塞请求。
"responseHeaders"
指定事件中应包含响应标头。
"extraHeaders"
指定标头可能违反跨源资源共享 (CORS)。
OnResponseStartedOptions
枚举
"responseHeaders"
指定事件中应包含响应标头。
"extraHeaders"
指定标头可能违反跨源资源共享 (CORS)。
OnSendHeadersOptions
枚举
"requestHeaders"
指定事件中应包含请求标头。
"extraHeaders"
指定标头可能违反跨源资源共享 (CORS)。
RequestFilter
一个对象,用于描述要应用于 webRequest 事件的过滤器。
属性
-
tabId
编号(选填)
-
类型
ResourceType[] 选填
请求类型的列表。与任何类型均不匹配的请求将被滤除。
-
网址
字符串[]
网址或网址格式的列表。与任何网址都不匹配的请求将被滤除。
-
windowId
编号(选填)
ResourceType
枚举
"main_frame"
将资源指定为主框架。
"sub_frame"
将资源指定为子帧。
"stylesheet"
将资源指定为样式表。
"script"
将资源指定为脚本。
"image"
以图像形式指定资源。
"font"
以字体形式指定资源。
"object"
将资源指定为对象。
"xmlhttprequest"
将资源指定为 XMLHttpRequest。
"ping"
将资源指定为 ping。
"csp_report"
将资源指定为内容安全政策 (CSP) 报告。
"media"
将资源指定为媒体对象。
"websocket"
将资源指定为 WebSocket。
"webbundle"
将资源指定为 WebBundle。
"other"
将资源指定为未包含在所列类型中的类型。
UploadData
包含在网址请求中上传的数据。
属性
-
字节
任何选填字段
包含数据副本的 ArrayBuffer。
-
文件
字符串(可选)
包含文件路径和名称的字符串。
属性
MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES
在持续的 10 分钟间隔内,可以调用 handlerBehaviorChanged
的最大次数。handlerBehaviorChanged
是一个开销很大的函数调用,不应经常调用。
值
20
方法
handlerBehaviorChanged()
chrome.webRequest.handlerBehaviorChanged(
callback?: function,
)
在 webRequest 处理程序的行为发生变化时需要调用,以防止因缓存而进行错误处理。此函数调用开销很大。不要经常调用它。
参数
-
callback
函数(可选)
callback
参数如下所示:() => void
返回
-
承诺<void>
Chrome 116 及更高版本Manifest V3 及更高版本支持 Promise,但为以下项目提供回调: 向后兼容性您不能在同一个函数调用中同时使用这两者。通过 promise 使用传递给回调的类型进行解析。
事件
onActionIgnored
chrome.webRequest.onActionIgnored.addListener(
callback: function,
)
在扩展程序对网络请求建议的修改被忽略时触发。当与其他扩展程序冲突时就会发生这种情况。
参数
-
callback
函数
callback
参数如下所示:(details: object) => void
-
详细信息
对象
-
action
已忽略的建议操作。
-
requestId
字符串
请求的 ID。请求 ID 在浏览器会话中是唯一的。因此,它们可用于将同一请求的不同事件相关联。
-
-
onAuthRequired
chrome.webRequest.onAuthRequired.addListener(
callback: function,
filter: RequestFilter,
extraInfoSpec?: OnAuthRequiredOptions[],
)
在收到身份验证失败时触发。监听器有三个选项:可以提供身份验证凭据、取消请求并显示错误页面,或者不对质询执行任何操作。如果提供了错误的用户凭据,系统可能会针对同一请求多次调用此函数。请注意,在 extraInfoSpec
参数中只能指定 'blocking'
或 'asyncBlocking'
模式之一。
参数
-
callback
函数
callback
参数如下所示:(details: object, asyncCallback?: function) => BlockingResponse | undefined
-
详细信息
对象
-
挑战者
对象
请求身份验证的服务器。
-
主机
字符串
-
端口
number
-
-
documentId
字符串
Chrome 106 及更高版本发出请求的文档的 UUID。
-
documentLifecycleChrome 106 及更高版本
文档所处的生命周期。
-
frameId
number
值 0 表示请求发生在主帧中;正值表示请求发生所在的子帧的 ID。如果(子)帧的文档已加载(
type
为main_frame
或sub_frame
),则frameId
表示此帧的 ID,而不是外帧的 ID。帧 ID 在标签页中是唯一的。 -
frameTypeChrome 106 及更高版本
请求发生的帧类型。
-
发起者
字符串(可选)
Chrome 63 及更高版本发起请求的来源。这一点不会因为重定向而改变。如果此原点是不透明的,则字符串“null”。
-
isProxy
布尔值
如果是代理身份验证,则为 true;如果是 WWW-Authenticate,则为 false。
-
method
字符串
标准 HTTP 方法。
-
parentDocumentId
字符串(可选)
Chrome 106 及更高版本拥有此框架的父文档的 UUID。如果没有父级,则不会设置此字段。
-
parentFrameId
number
封装发送请求的帧的帧的 ID。如果不存在父帧,则设置为 -1。
-
大区
字符串(可选)
服务器提供的身份验证领域(如果有)。
-
requestId
字符串
请求的 ID。请求 ID 在浏览器会话中是唯一的。因此,它们可用于将同一请求的不同事件相关联。
-
responseHeaders
HttpHeaders 可选
随此响应一起收到的 HTTP 响应标头。
-
方案
字符串
身份验证方案,例如“Basic”(基本信息)或“Digest”(摘要)。
-
statusCode
number
Chrome 43 及更高版本服务器返回的标准 HTTP 状态代码。
-
statusLine
字符串
响应的 HTTP 状态行或“HTTP/0.9 200 OK”字符串(即,缺少状态行的响应)或空字符串(如果没有标头)。
-
tabId
number
发生请求的标签页的 ID。如果请求与标签页无关,请将其设为 -1。
-
timeStamp
number
触发此信号的时间(以毫秒为单位,从 Epoch 起算)。
-
类型
请求的资源将如何使用。
-
网址
字符串
-
-
asyncCallback
函数(可选)
Chrome 58 及更高版本asyncCallback
参数如下所示:(response: BlockingResponse) => void
-
Response
-
-
返回
BlockingResponse |未定义
如果“屏蔽”是在“extraInfoSpec”中指定的参数,事件监听器应返回一个该类型的对象。
-
-
filter
-
extraInfoSpec
onBeforeRedirect
chrome.webRequest.onBeforeRedirect.addListener(
callback: function,
filter: RequestFilter,
extraInfoSpec?: OnBeforeRedirectOptions[],
)
在服务器发起的重定向即将发生时触发。
参数
-
callback
函数
callback
参数如下所示:(details: object) => void
-
详细信息
对象
-
documentId
字符串
Chrome 106 及更高版本发出请求的文档的 UUID。
-
documentLifecycleChrome 106 及更高版本
文档所处的生命周期。
-
frameId
number
值 0 表示请求发生在主帧中;正值表示请求发生所在的子帧的 ID。如果(子)帧的文档已加载(
type
为main_frame
或sub_frame
),则frameId
表示此帧的 ID,而不是外帧的 ID。帧 ID 在标签页中是唯一的。 -
frameTypeChrome 106 及更高版本
请求发生的帧类型。
-
fromCache
布尔值
指示此响应是否从磁盘缓存中提取。
-
发起者
字符串(可选)
Chrome 63 及更高版本发起请求的来源。这一点不会因为重定向而改变。如果此原点是不透明的,则字符串“null”。
-
ip
字符串(可选)
请求实际发送到的服务器 IP 地址。请注意,这可能是字面量 IPv6 地址。
-
method
字符串
标准 HTTP 方法。
-
parentDocumentId
字符串(可选)
Chrome 106 及更高版本拥有此框架的父文档的 UUID。如果没有父级,则不会设置此字段。
-
parentFrameId
number
封装发送请求的帧的帧的 ID。如果不存在父帧,则设置为 -1。
-
redirectUrl
字符串
新网址。
-
requestId
字符串
请求的 ID。请求 ID 在浏览器会话中是唯一的。因此,它们可用于将同一请求的不同事件相关联。
-
responseHeaders
HttpHeaders 可选
随此重定向一起收到的 HTTP 响应标头。
-
statusCode
number
服务器返回的标准 HTTP 状态代码。
-
statusLine
字符串
响应的 HTTP 状态行或“HTTP/0.9 200 OK”字符串(即,缺少状态行的响应)或空字符串(如果没有标头)。
-
tabId
number
发生请求的标签页的 ID。如果请求与标签页无关,请将其设为 -1。
-
timeStamp
number
触发此信号的时间(以毫秒为单位,从 Epoch 起算)。
-
类型
请求的资源将如何使用。
-
网址
字符串
-
-
-
filter
-
extraInfoSpec
onBeforeRequest
chrome.webRequest.onBeforeRequest.addListener(
callback: function,
filter: RequestFilter,
extraInfoSpec?: OnBeforeRequestOptions[],
)
在请求即将发生时触发。
参数
-
callback
函数
callback
参数如下所示:(details: object) => BlockingResponse | undefined
-
详细信息
对象
-
documentId
字符串(可选)
Chrome 106 及更高版本发出请求的文档的 UUID。
-
documentLifecycle
extensionTypes.DocumentLifecycle optional
Chrome 106 及更高版本文档所处的生命周期。
-
frameId
number
值 0 表示请求发生在主帧中;正值表示请求发生所在的子帧的 ID。如果(子)帧的文档已加载(
type
为main_frame
或sub_frame
),则frameId
表示此帧的 ID,而不是外帧的 ID。帧 ID 在标签页中是唯一的。 -
frameType
extensionTypes.FrameType optional
Chrome 106 及更高版本请求发生的帧类型。
-
发起者
字符串(可选)
Chrome 63 及更高版本发起请求的来源。这一点不会因为重定向而改变。如果此原点是不透明的,则字符串“null”。
-
method
字符串
标准 HTTP 方法。
-
parentDocumentId
字符串(可选)
Chrome 106 及更高版本拥有此框架的父文档的 UUID。如果没有父级,则不会设置此字段。
-
parentFrameId
number
封装发送请求的帧的帧的 ID。如果不存在父帧,则设置为 -1。
-
requestBody
对象(可选)
包含 HTTP 请求正文数据。仅当 extraInfoSpec 包含“requestBody”时提供。
-
错误
字符串(可选)
获取请求正文数据时出错。
-
formData
对象(可选)
如果请求方法是 POST 且正文是采用 UTF8 编码(编码为 multipart/form-data 或 application/x-www-form-urlencoded)的一系列键值对,则该字典会存在,并且每个键都包含该键的所有值的列表。如果数据属于其他媒体类型,或者格式不正确,则不存在相应的字典。此字典的示例值是 {'key': ['value1', 'value2']}。
-
原始
UploadData[] 可选
如果请求方法是 PUT 或 POST,并且尚未在 formData 中解析正文,则未解析的请求正文元素将包含在此数组中。
-
-
requestId
字符串
请求的 ID。请求 ID 在浏览器会话中是唯一的。因此,它们可用于将同一请求的不同事件相关联。
-
tabId
number
发生请求的标签页的 ID。如果请求与标签页无关,请将其设为 -1。
-
timeStamp
number
触发此信号的时间(以毫秒为单位,从 Epoch 起算)。
-
类型
请求的资源将如何使用。
-
网址
字符串
-
-
返回
BlockingResponse |未定义
如果“屏蔽”是在“extraInfoSpec”中指定的参数,事件监听器应返回一个该类型的对象。
-
-
filter
-
extraInfoSpec
onBeforeSendHeaders
chrome.webRequest.onBeforeSendHeaders.addListener(
callback: function,
filter: RequestFilter,
extraInfoSpec?: OnBeforeSendHeadersOptions[],
)
在发送 HTTP 请求之前、请求标头可用时触发。在与服务器建立 TCP 连接之后、发送任何 HTTP 数据之前,就可能会发生这种情况。
参数
-
callback
函数
callback
参数如下所示:(details: object) => BlockingResponse | undefined
-
详细信息
对象
-
documentId
字符串
Chrome 106 及更高版本发出请求的文档的 UUID。
-
documentLifecycleChrome 106 及更高版本
文档所处的生命周期。
-
frameId
number
值 0 表示请求发生在主帧中;正值表示请求发生所在的子帧的 ID。如果(子)帧的文档已加载(
type
为main_frame
或sub_frame
),则frameId
表示此帧的 ID,而不是外帧的 ID。帧 ID 在标签页中是唯一的。 -
frameTypeChrome 106 及更高版本
请求发生的帧类型。
-
发起者
字符串(可选)
Chrome 63 及更高版本发起请求的来源。这一点不会因为重定向而改变。如果此原点是不透明的,则字符串“null”。
-
method
字符串
标准 HTTP 方法。
-
parentDocumentId
字符串(可选)
Chrome 106 及更高版本拥有此框架的父文档的 UUID。如果没有父级,则不会设置此字段。
-
parentFrameId
number
封装发送请求的帧的帧的 ID。如果不存在父帧,则设置为 -1。
-
requestHeaders
HttpHeaders 可选
将随此请求一起发送的 HTTP 请求标头。
-
requestId
字符串
请求的 ID。请求 ID 在浏览器会话中是唯一的。因此,它们可用于将同一请求的不同事件相关联。
-
tabId
number
发生请求的标签页的 ID。如果请求与标签页无关,请将其设为 -1。
-
timeStamp
number
触发此信号的时间(以毫秒为单位,从 Epoch 起算)。
-
类型
请求的资源将如何使用。
-
网址
字符串
-
-
返回
BlockingResponse |未定义
如果“屏蔽”是在“extraInfoSpec”中指定的参数,事件监听器应返回一个该类型的对象。
-
-
filter
-
extraInfoSpec
onCompleted
chrome.webRequest.onCompleted.addListener(
callback: function,
filter: RequestFilter,
extraInfoSpec?: OnCompletedOptions[],
)
请求完成时触发。
参数
-
callback
函数
callback
参数如下所示:(details: object) => void
-
详细信息
对象
-
documentId
字符串
Chrome 106 及更高版本发出请求的文档的 UUID。
-
documentLifecycleChrome 106 及更高版本
文档所处的生命周期。
-
frameId
number
值 0 表示请求发生在主帧中;正值表示请求发生所在的子帧的 ID。如果(子)帧的文档已加载(
type
为main_frame
或sub_frame
),则frameId
表示此帧的 ID,而不是外帧的 ID。帧 ID 在标签页中是唯一的。 -
frameTypeChrome 106 及更高版本
请求发生的帧类型。
-
fromCache
布尔值
指示此响应是否从磁盘缓存中提取。
-
发起者
字符串(可选)
Chrome 63 及更高版本发起请求的来源。这一点不会因为重定向而改变。如果此原点是不透明的,则字符串“null”。
-
ip
字符串(可选)
请求实际发送到的服务器 IP 地址。请注意,这可能是字面量 IPv6 地址。
-
method
字符串
标准 HTTP 方法。
-
parentDocumentId
字符串(可选)
Chrome 106 及更高版本拥有此框架的父文档的 UUID。如果没有父级,则不会设置此字段。
-
parentFrameId
number
封装发送请求的帧的帧的 ID。如果不存在父帧,则设置为 -1。
-
requestId
字符串
请求的 ID。请求 ID 在浏览器会话中是唯一的。因此,它们可用于将同一请求的不同事件相关联。
-
responseHeaders
HttpHeaders 可选
随此响应一起收到的 HTTP 响应标头。
-
statusCode
number
服务器返回的标准 HTTP 状态代码。
-
statusLine
字符串
响应的 HTTP 状态行或“HTTP/0.9 200 OK”字符串(即,缺少状态行的响应)或空字符串(如果没有标头)。
-
tabId
number
发生请求的标签页的 ID。如果请求与标签页无关,请将其设为 -1。
-
timeStamp
number
触发此信号的时间(以毫秒为单位,从 Epoch 起算)。
-
类型
请求的资源将如何使用。
-
网址
字符串
-
-
-
filter
-
extraInfoSpec
OnCompletedOptions[] 可选
onErrorOccurred
chrome.webRequest.onErrorOccurred.addListener(
callback: function,
filter: RequestFilter,
extraInfoSpec?: OnErrorOccurredOptions[],
)
发生错误时触发。
参数
-
callback
函数
callback
参数如下所示:(details: object) => void
-
详细信息
对象
-
documentId
字符串
Chrome 106 及更高版本发出请求的文档的 UUID。如果请求是帧导航,则此值不存在。
-
documentLifecycleChrome 106 及更高版本
文档所处的生命周期。
-
错误
字符串
错误说明。我们不保证此字符串在各版本之间保持向后兼容。您不得根据其内容进行解析和操作。
-
frameId
number
值 0 表示请求发生在主帧中;正值表示请求发生所在的子帧的 ID。如果(子)帧的文档已加载(
type
为main_frame
或sub_frame
),则frameId
表示此帧的 ID,而不是外帧的 ID。帧 ID 在标签页中是唯一的。 -
frameTypeChrome 106 及更高版本
请求发生的帧类型。
-
fromCache
布尔值
指示此响应是否从磁盘缓存中提取。
-
发起者
字符串(可选)
Chrome 63 及更高版本发起请求的来源。这一点不会因为重定向而改变。如果此原点是不透明的,则字符串“null”。
-
ip
字符串(可选)
请求实际发送到的服务器 IP 地址。请注意,这可能是字面量 IPv6 地址。
-
method
字符串
标准 HTTP 方法。
-
parentDocumentId
字符串(可选)
Chrome 106 及更高版本拥有此框架的父文档的 UUID。如果没有父级,则不会设置此字段。
-
parentFrameId
number
封装发送请求的帧的帧的 ID。如果不存在父帧,则设置为 -1。
-
requestId
字符串
请求的 ID。请求 ID 在浏览器会话中是唯一的。因此,它们可用于将同一请求的不同事件相关联。
-
tabId
number
发生请求的标签页的 ID。如果请求与标签页无关,请将其设为 -1。
-
timeStamp
number
触发此信号的时间(以毫秒为单位,从 Epoch 起算)。
-
类型
请求的资源将如何使用。
-
网址
字符串
-
-
-
filter
-
extraInfoSpec
onHeadersReceived
chrome.webRequest.onHeadersReceived.addListener(
callback: function,
filter: RequestFilter,
extraInfoSpec?: OnHeadersReceivedOptions[],
)
在收到请求的 HTTP 响应标头时触发。
参数
-
callback
函数
callback
参数如下所示:(details: object) => BlockingResponse | undefined
-
详细信息
对象
-
documentId
字符串
Chrome 106 及更高版本发出请求的文档的 UUID。
-
documentLifecycleChrome 106 及更高版本
文档所处的生命周期。
-
frameId
number
值 0 表示请求发生在主帧中;正值表示请求发生所在的子帧的 ID。如果(子)帧的文档已加载(
type
为main_frame
或sub_frame
),则frameId
表示此帧的 ID,而不是外帧的 ID。帧 ID 在标签页中是唯一的。 -
frameTypeChrome 106 及更高版本
请求发生的帧类型。
-
发起者
字符串(可选)
Chrome 63 及更高版本发起请求的来源。这一点不会因为重定向而改变。如果此原点是不透明的,则字符串“null”。
-
method
字符串
标准 HTTP 方法。
-
parentDocumentId
字符串(可选)
Chrome 106 及更高版本拥有此框架的父文档的 UUID。如果没有父级,则不会设置此字段。
-
parentFrameId
number
封装发送请求的帧的帧的 ID。如果不存在父帧,则设置为 -1。
-
requestId
字符串
请求的 ID。请求 ID 在浏览器会话中是唯一的。因此,它们可用于将同一请求的不同事件相关联。
-
responseHeaders
HttpHeaders 可选
随此响应一起收到的 HTTP 响应标头。
-
statusCode
number
Chrome 43 及更高版本服务器返回的标准 HTTP 状态代码。
-
statusLine
字符串
响应的 HTTP 状态行或“HTTP/0.9 200 OK”字符串。
-
tabId
number
发生请求的标签页的 ID。如果请求与标签页无关,请将其设为 -1。
-
timeStamp
number
触发此信号的时间(以毫秒为单位,从 Epoch 起算)。
-
类型
请求的资源将如何使用。
-
网址
字符串
-
-
返回
BlockingResponse |未定义
如果“屏蔽”是在“extraInfoSpec”中指定的参数,事件监听器应返回一个该类型的对象。
-
-
filter
-
extraInfoSpec
onResponseStarted
chrome.webRequest.onResponseStarted.addListener(
callback: function,
filter: RequestFilter,
extraInfoSpec?: OnResponseStartedOptions[],
)
收到响应正文的第一个字节时触发。对于 HTTP 请求,这意味着状态行和响应标头可用。
参数
-
callback
函数
callback
参数如下所示:(details: object) => void
-
详细信息
对象
-
documentId
字符串
Chrome 106 及更高版本发出请求的文档的 UUID。
-
documentLifecycleChrome 106 及更高版本
文档所处的生命周期。
-
frameId
number
值 0 表示请求发生在主帧中;正值表示请求发生所在的子帧的 ID。如果(子)帧的文档已加载(
type
为main_frame
或sub_frame
),则frameId
表示此帧的 ID,而不是外帧的 ID。帧 ID 在标签页中是唯一的。 -
frameTypeChrome 106 及更高版本
请求发生的帧类型。
-
fromCache
布尔值
指示此响应是否从磁盘缓存中提取。
-
发起者
字符串(可选)
Chrome 63 及更高版本发起请求的来源。这一点不会因为重定向而改变。如果此原点是不透明的,则字符串“null”。
-
ip
字符串(可选)
请求实际发送到的服务器 IP 地址。请注意,这可能是字面量 IPv6 地址。
-
method
字符串
标准 HTTP 方法。
-
parentDocumentId
字符串(可选)
Chrome 106 及更高版本拥有此框架的父文档的 UUID。如果没有父级,则不会设置此字段。
-
parentFrameId
number
封装发送请求的帧的帧的 ID。如果不存在父帧,则设置为 -1。
-
requestId
字符串
请求的 ID。请求 ID 在浏览器会话中是唯一的。因此,它们可用于将同一请求的不同事件相关联。
-
responseHeaders
HttpHeaders 可选
随此响应一起收到的 HTTP 响应标头。
-
statusCode
number
服务器返回的标准 HTTP 状态代码。
-
statusLine
字符串
响应的 HTTP 状态行或“HTTP/0.9 200 OK”字符串(即,缺少状态行的响应)或空字符串(如果没有标头)。
-
tabId
number
发生请求的标签页的 ID。如果请求与标签页无关,请将其设为 -1。
-
timeStamp
number
触发此信号的时间(以毫秒为单位,从 Epoch 起算)。
-
类型
请求的资源将如何使用。
-
网址
字符串
-
-
-
filter
-
extraInfoSpec
onSendHeaders
chrome.webRequest.onSendHeaders.addListener(
callback: function,
filter: RequestFilter,
extraInfoSpec?: OnSendHeadersOptions[],
)
在请求即将发送到服务器之前触发(触发 onSendHeaders 时可以看到对之前的 onBeforeSendHeaders 回调的修改)。
参数
-
callback
函数
callback
参数如下所示:(details: object) => void
-
详细信息
对象
-
documentId
字符串
Chrome 106 及更高版本发出请求的文档的 UUID。
-
documentLifecycleChrome 106 及更高版本
文档所处的生命周期。
-
frameId
number
值 0 表示请求发生在主帧中;正值表示请求发生所在的子帧的 ID。如果(子)帧的文档已加载(
type
为main_frame
或sub_frame
),则frameId
表示此帧的 ID,而不是外帧的 ID。帧 ID 在标签页中是唯一的。 -
frameTypeChrome 106 及更高版本
请求发生的帧类型。
-
发起者
字符串(可选)
Chrome 63 及更高版本发起请求的来源。这一点不会因为重定向而改变。如果此原点是不透明的,则字符串“null”。
-
method
字符串
标准 HTTP 方法。
-
parentDocumentId
字符串(可选)
Chrome 106 及更高版本拥有此框架的父文档的 UUID。如果没有父级,则不会设置此字段。
-
parentFrameId
number
封装发送请求的帧的帧的 ID。如果不存在父帧,则设置为 -1。
-
requestHeaders
HttpHeaders 可选
随此请求一起发送的 HTTP 请求标头。
-
requestId
字符串
请求的 ID。请求 ID 在浏览器会话中是唯一的。因此,它们可用于将同一请求的不同事件相关联。
-
tabId
number
发生请求的标签页的 ID。如果请求与标签页无关,请将其设为 -1。
-
timeStamp
number
触发此信号的时间(以毫秒为单位,从 Epoch 起算)。
-
类型
请求的资源将如何使用。
-
网址
字符串
-
-
-
filter
-
extraInfoSpec
OnSendHeadersOptions[] 可选