说明
注意:此 API 已废弃。不妨改用 declarativeNetRequest
API。使用 chrome.declarativeWebRequest
API 拦截、阻止或修改传输中的请求。它比 chrome.webRequest
API 快得多,因为您可以注册在浏览器(而不是 JavaScript 引擎)中评估的规则,从而减少往返延迟时间并提高效率。
权限
declarativeWebRequest
您必须声明“declarativeWebRequest”扩展程序清单中授予此权限,才能使用它 API 以及主机权限。
{
"name": "My extension",
...
"permissions": [
"declarativeWebRequest",
"*://*/*"
],
...
}
可用性
清单
请注意,某些类型的非敏感操作不需要主机权限:
CancelRequest
IgnoreRules
RedirectToEmptyDocument
RedirectToTransparentImage
必须具备网络请求的所有主机的主机权限,才能执行 SendMessageToExtension()
操作
您希望根据哪个条件触发消息
所有其他操作都需要所有网址的主机权限。
例如,如果 "https://*.google.com/*"
是扩展程序具有的唯一主机权限,则此类
扩展程序可能会设置规则来:
- 取消对
https://www.google.com
或https://anything.else.com
的请求。 - 导航到
https://www.google.com
(而非https://something.else.com
)时发送消息。
该扩展程序无法设置将 https://www.google.com
重定向到 https://mail.google.com
的规则。
规则
声明式 Web 请求 API 遵循声明式 API 的概念。您可以注册
为 chrome.declarativeWebRequest.onRequest
事件对象添加规则。
声明式 Web 请求 API 支持一种类型的匹配条件,即 RequestMatcher
。通过
当且仅当满足列出的所有条件时,RequestMatcher
才会匹配网络请求。以下
当用户在RequestMatcher
https://www.example.com
多功能框:
var matcher = new chrome.declarativeWebRequest.RequestMatcher({
url: { hostSuffix: 'example.com', schemes: ['http'] },
resourceType: ['main_frame']
});
由于 scheme,RequestMatcher
会拒绝对 https://www.example.com
的请求。
此外,所有对嵌入式 iframe 的请求都会因为 resourceType
而被拒绝。
要取消对“example.com”的所有请求,您可以按如下方式定义规则:
var rule = {
conditions: [
new chrome.declarativeWebRequest.RequestMatcher({
url: { hostSuffix: 'example.com' } })
],
actions: [
new chrome.declarativeWebRequest.CancelRequest()
]
};
如需取消对 example.com
和 foobar.com
的所有请求,您可以添加第二个条件,
因为每个条件足以触发所有指定的操作:
var rule2 = {
conditions: [
new chrome.declarativeWebRequest.RequestMatcher({
url: { hostSuffix: 'example.com' } }),
new chrome.declarativeWebRequest.RequestMatcher({
url: { hostSuffix: 'foobar.com' } })
],
actions: [
new chrome.declarativeWebRequest.CancelRequest()
]
};
按如下方式注册规则:
chrome.declarativeWebRequest.onRequest.addRules([rule2]);
条件和操作的评估
声明式网络请求 API 遵循网络请求的生命周期模型 请求 API。这意味着只能在 Web 请求的特定阶段测试条件 同样,操作只能在特定阶段执行下表列出了 与条件和操作兼容的请求阶段。
可以处理条件属性的请求阶段。 | ||||
---|---|---|---|---|
使用情况属性 | onBeforeRequest | onBeforeSendHeaders | onHeadersReceived | onAuthRequired |
url |
✓ | ✓ | ✓ | ✓ |
resourceType |
✓ | ✓ | ✓ | ✓ |
contentType |
✓ | |||
excludeContentType |
✓ | |||
responseHeaders |
✓ | |||
excludeResponseHeaders |
✓ | |||
requestHeaders |
✓ | |||
excludeRequestHeaders |
✓ | |||
thirdPartyForCookies |
✓ | ✓ | ✓ | ✓ |
可以执行操作的请求阶段。 | ||||
事件 | onBeforeRequest | onBeforeSendHeaders | onHeadersReceived | onAuthRequired |
AddRequestCookie |
✓ | |||
AddResponseCookie |
✓ | |||
AddResponseHeader |
✓ | |||
CancelRequest |
✓ | ✓ | ✓ | ✓ |
EditRequestCookie |
✓ | |||
EditResponseCookie |
✓ | |||
IgnoreRules |
✓ | ✓ | ✓ | ✓ |
RedirectByRegEx |
✓ | ✓ | ||
RedirectRequest |
✓ | ✓ | ||
RedirectToEmptyDocument |
✓ | ✓ | ||
RedirectToTransparentImage |
✓ | ✓ | ||
RemoveRequestCookie |
✓ | |||
RemoveRequestHeader |
✓ | |||
RemoveResponseCookie |
✓ | |||
RemoveResponseHeader |
✓ | |||
SendMessageToExtension |
✓ | ✓ | ✓ | ✓ |
SetRequestHeader |
✓ |
使用优先级覆盖规则
规则可以与优先级相关联,如 Events API 中所述。这种机制可以
用于表示例外情况。以下示例会屏蔽对名为 evil.jpg
的映像的所有请求
但位于服务器“myserver.com”上
var rule1 = {
priority: 100,
conditions: [
new chrome.declarativeWebRequest.RequestMatcher({
url: { pathEquals: 'evil.jpg' } })
],
actions: [
new chrome.declarativeWebRequest.CancelRequest()
]
};
var rule2 = {
priority: 1000,
conditions: [
new chrome.declarativeWebRequest.RequestMatcher({
url: { hostSuffix: '.myserver.com' } })
],
actions: [
new chrome.declarativeWebRequest.IgnoreRules({
lowerPriorityThan: 1000 })
]
};
chrome.declarativeWebRequest.onRequest.addRules([rule1, rule2]);
请务必注意,IgnoreRules
操作在请求中不会持久保留
阶段。系统会在网络请求的每个阶段评估所有规则的所有条件。如果
已执行 IgnoreRules
操作,但它仅适用于针对同一网页执行的其他操作
Web 请求。
类型
AddRequestCookie
向请求添加 Cookie 或覆盖 Cookie,以防已存在其他同名的 Cookie。请注意,最好使用 Cookies API,因为此 API 的计算开销较低。
属性
-
构造函数
void
constructor
函数如下所示:(arg: AddRequestCookie) => {...}
-
要添加到请求的 Cookie。没有可以未定义的字段。
AddResponseCookie
向响应添加一个 Cookie,如果已存在另一个同名的 Cookie,则覆盖一个 Cookie。请注意,最好使用 Cookies API,因为此 API 的计算开销较低。
属性
-
构造函数
void
constructor
函数如下所示:(arg: AddResponseCookie) => {...}
-
要添加到响应的 Cookie。必须指定名称和值。
AddResponseHeader
将响应标头添加到 Web 请求的响应中。由于多个响应标头可能具有相同的名称,因此要替换一个响应标头,您需要先移除该标头,然后再添加新的响应标头。
属性
-
构造函数
void
constructor
函数如下所示:(arg: AddResponseHeader) => {...}
-
name
字符串
HTTP 响应标头名称。
-
值
字符串
HTTP 响应标头值。
CancelRequest
用于取消网络请求的声明式事件操作。
属性
-
构造函数
void
constructor
函数如下所示:(arg: CancelRequest) => {...}
EditRequestCookie
修改一个或多个请求的 Cookie。请注意,最好使用 Cookies API,因为此 API 的计算开销较低。
属性
-
构造函数
void
constructor
函数如下所示:(arg: EditRequestCookie) => {...}
-
filter
过滤出要修改的 Cookie。所有空条目都会被忽略。
-
应在构建过滤器的 Cookie 中覆盖的属性。设置为空字符串的属性会被移除。
EditResponseCookie
修改一个或多个响应 Cookie。请注意,最好使用 Cookies API,因为此 API 的计算开销较低。
属性
-
构造函数
void
constructor
函数如下所示:(arg: EditResponseCookie) => {...}
-
filter
过滤出要修改的 Cookie。所有空条目都会被忽略。
-
应在构建过滤器的 Cookie 中覆盖的属性。设置为空字符串的属性会被移除。
FilterResponseCookie
HTTP 响应中 Cookie 的过滤器。
属性
-
ageLowerBound
编号(选填)
包含 Cookie 生命周期下限(指定在当前时间之后的秒数内)。仅限失效日期时间设置为“now + ageLowerBound”的 Cookie或之后满足此条件。会话 Cookie 不符合此过滤器的条件。Cookie 生命周期通过“max-age”或“expires”Cookie 属性。如果两个都指定了,则为“max-age”计算 Cookie 生命周期。
-
ageUpperBound
编号(选填)
包含 Cookie 生命周期的上限(以当前时间之后的秒数指定)。只有失效日期在 [now, now + ageUpperBound] 这一间隔内的 Cookie 才符合此条件。会话 Cookie 和有效期为过去时间的 Cookie 不符合此过滤器的条件。Cookie 生命周期通过“max-age”或“expires”Cookie 属性。如果两个都指定了,则为“max-age”计算 Cookie 生命周期。
-
网域
字符串(可选)
网域 Cookie 属性的值。
-
expires
字符串(可选)
到期 Cookie 属性的值。
-
httpOnly
字符串(可选)
是否存在 HttpOnly Cookie 属性。
-
maxAge
编号(选填)
Max-Age Cookie 属性的值
-
name
字符串(可选)
Cookie 的名称。
-
路径
字符串(可选)
路径 Cookie 属性的值。
-
安全
字符串(可选)
安全 Cookie 属性是否存在。
-
会话 Cookie
布尔值(可选)
过滤会话 Cookie。会话 Cookie 在任一“max-age”中未指定生命周期或“expires”属性。
-
值
字符串(可选)
Cookie 的值,可以用英文双引号填充。
HeaderFilter
针对各种条件的过滤器请求标头。多个条件会作为一个连接进行求值。
属性
-
nameContains
string |string[] 选填
如果标头名称包含所有指定字符串,则匹配。
-
nameEquals
字符串(可选)
如果标头名称等于指定字符串,则匹配。
-
名称前缀
字符串(可选)
如果标头名称以指定字符串开头,则匹配。
-
nameSuffix
字符串(可选)
如果标头名称以指定字符串结尾,则匹配。
-
valueContains
string |string[] 选填
如果标头值包含所有指定字符串,则匹配。
-
valueEquals
字符串(可选)
如果标头值等于指定字符串,则匹配。
-
valuePrefix
字符串(可选)
如果标头值以指定字符串开头,则匹配。
-
valueSuffix
字符串(可选)
如果标头值以指定字符串结尾,则匹配。
IgnoreRules
遮盖与指定条件匹配的所有规则。
属性
-
构造函数
void
constructor
函数如下所示:(arg: IgnoreRules) => {...}
-
参数
-
-
hasTag
字符串(可选)
如果设置,系统会忽略具有指定标记的规则。这种忽略不会持久存在,它只影响同一网络请求阶段的规则及其操作。请注意,规则按其优先级的降序执行。此操作会影响优先级低于当前规则的规则。相同优先级的规则不一定会被忽略。
-
lowerPriorityThan
编号(选填)
如果设置,系统会忽略优先级低于指定值的规则。此边界不会持久保留,它只影响同一网络请求阶段的规则及其操作。
RedirectByRegEx
通过在网址上应用正则表达式来重定向请求。正则表达式使用 RE2 语法。
属性
-
构造函数
void
constructor
函数如下所示:(arg: RedirectByRegEx) => {...}
-
来自
字符串
可能包含捕获组的匹配模式。捕获组使用 Perl 语法($1、$2, ...)而不是 RE2 语法(\1、\2...)引用,以便更接近 JavaScript 正则表达式。
-
至
字符串
目标格式。
RedirectRequest
用于重定向网络请求的声明性事件操作。
属性
-
构造函数
void
constructor
函数如下所示:(arg: RedirectRequest) => {...}
-
redirectUrl
字符串
请求被重定向到的目标页面。
RedirectToEmptyDocument
将网络请求重定向到空文档的声明式事件操作。
属性
-
构造函数
void
constructor
函数如下所示:(arg: RedirectToEmptyDocument) => {...}
RedirectToTransparentImage
将网络请求重定向到透明图片的声明性事件操作。
属性
-
构造函数
void
constructor
函数如下所示:(arg: RedirectToTransparentImage) => {...}
RemoveRequestCookie
移除一个或多个请求的 Cookie。请注意,最好使用 Cookies API,因为此 API 的计算开销较低。
属性
-
构造函数
void
constructor
函数如下所示:(arg: RemoveRequestCookie) => {...}
-
filter
过滤出将被移除的 Cookie。所有空条目都会被忽略。
RemoveRequestHeader
移除指定名称的请求标头。请勿在同一请求中使用相同标头名称的 SetRequestHeader 和 RemoveRequestHeader。每个请求标头名称在每个请求中仅出现一次。
属性
-
构造函数
void
constructor
函数如下所示:(arg: RemoveRequestHeader) => {...}
-
name
字符串
HTTP 请求标头名称(不区分大小写)。
RemoveResponseCookie
移除一个或多个响应 Cookie。请注意,最好使用 Cookies API,因为此 API 的计算开销较低。
属性
-
构造函数
void
constructor
函数如下所示:(arg: RemoveResponseCookie) => {...}
-
filter
过滤出将被移除的 Cookie。所有空条目都会被忽略。
RemoveResponseHeader
移除指定名称和值的所有响应标头。
属性
-
构造函数
void
constructor
函数如下所示:(arg: RemoveResponseHeader) => {...}
-
name
字符串
HTTP 请求标头名称(不区分大小写)。
-
值
字符串(可选)
HTTP 请求标头值(不区分大小写)。
RequestCookie
HTTP 请求中 Cookie 的过滤器或规范。
属性
-
name
字符串(可选)
Cookie 的名称。
-
值
字符串(可选)
Cookie 的值,可以用英文双引号填充。
RequestMatcher
按各种条件匹配网络事件。
属性
-
构造函数
void
constructor
函数如下所示:(arg: RequestMatcher) => {...}
-
contentType
string[] 选填
如果响应的 MIME 媒体类型(来自 HTTP Content-Type 标头)包含在列表中,则匹配。
-
excludeContentType
string[] 选填
如果响应的 MIME 媒体类型(来自 HTTP Content-Type 标头)未包含在列表中,则匹配。
-
excludeRequestHeaders
HeaderFilter[] 可选
如果没有任何请求标头与任何 HeaderFilters 匹配,则匹配。
-
excludeResponseHeaders
HeaderFilter[] 可选
如果没有任何响应标头与任何 HeaderFilters 匹配,则匹配。
-
firstPartyForCookiesUrl
UrlFilter 可选
<ph type="x-smartling-placeholder"></ph> 已弃用自版本 82 起已忽略。
如果“第一方”满足 UrlFilter 的条件,则匹配请求的网址。“第一方”请求的网址(如果存在)可以与请求的目标网址不同,并说明什么是“第一方”以便进行第三方 Cookie 检查。
-
requestHeaders
HeaderFilter[] 可选
如果某些请求标头与其中一个 HeaderFilters 匹配,则匹配。
-
resourceType
ResourceType[] 选填
如果请求的请求类型包含在列表中,则匹配。与任何类型均不匹配的请求将被滤除。
-
responseHeaders
HeaderFilter[] 可选
如果某些响应标头与其中一个 HeaderFilters 匹配,则匹配。
-
阶段
Stage[](可选)
包含描述阶段的字符串列表。允许的值为“onBeforeRequest”、“onBeforeSendHeaders”、“onHeadersReceived”、“onAuthRequired”。如果此属性存在,则其适用阶段仅局限于所列阶段。请注意,整个条件仅适用于与所有属性都兼容的阶段。
-
thirdPartyForCookies
布尔值(可选)
<ph type="x-smartling-placeholder"></ph> 已弃用自版本 87 起已忽略。
如果设置为 true,则匹配受第三方 Cookie 政策约束的请求。如果设置为 false,匹配所有其他请求。
-
网址
UrlFilter 可选
如果请求的网址满足 UrlFilter 的条件,则匹配。
ResponseCookie
HTTP 响应中 Cookie 规范。
属性
-
网域
字符串(可选)
网域 Cookie 属性的值。
-
expires
字符串(可选)
到期 Cookie 属性的值。
-
httpOnly
字符串(可选)
是否存在 HttpOnly Cookie 属性。
-
maxAge
编号(选填)
Max-Age Cookie 属性的值
-
name
字符串(可选)
Cookie 的名称。
-
路径
字符串(可选)
路径 Cookie 属性的值。
-
安全
字符串(可选)
安全 Cookie 属性是否存在。
-
值
字符串(可选)
Cookie 的值,可以用英文双引号填充。
SendMessageToExtension
属性
-
构造函数
void
constructor
函数如下所示:(arg: SendMessageToExtension) => {...}
-
消息
字符串
系统将在传递给事件处理脚本的字典的
message
属性中传递该值。
SetRequestHeader
将指定名称的请求标头设置为指定的值。如果之前不存在具有指定名称的标头,则系统会新建一个。标头名称比较始终不区分大小写。每个请求标头名称在每个请求中仅出现一次。
属性
-
构造函数
void
constructor
函数如下所示:(arg: SetRequestHeader) => {...}
-
name
字符串
HTTP 请求标头名称。
-
值
字符串
HTTP 请求标头值。
Stage
枚举
"onBeforeRequest"
"onBeforeSendHeaders"
"onHeadersReceived"
“onAuthRequired”
事件
onMessage
chrome.declarativeWebRequest.onMessage.addListener(
callback: function,
)
通过声明式网络请求 API 的操作通过 declarativeWebRequest.SendMessageToExtension
发送消息时触发。
参数
-
callback
函数
callback
参数如下所示:(details: object) => void
-
详细信息
对象
-
documentId
字符串(可选)
发出请求的文档的 UUID。
-
documentLifecycle
文档所处的生命周期。
-
frameId
number
值 0 表示请求发生在主帧中;正值表示请求发生所在的子帧的 ID。如果(子)帧的文档已加载(
type
为main_frame
或sub_frame
),则frameId
表示此帧的 ID,而不是外帧的 ID。帧 ID 在标签页中是唯一的。 -
frameType
导航发生的帧类型。
-
消息
字符串
由调用脚本发送的消息。
-
method
字符串
标准 HTTP 方法。
-
parentDocumentId
字符串(可选)
拥有此框架的父文档的 UUID。如果没有父级,则不会设置此字段。
-
parentFrameId
number
封装发送请求的帧的帧的 ID。如果不存在父帧,则设置为 -1。
-
requestId
字符串
请求的 ID。请求 ID 在浏览器会话中是唯一的。因此,它们可用于将同一请求的不同事件相关联。
-
流程中的
事件触发的网络请求阶段。
-
tabId
number
发生请求的标签页的 ID。如果请求与标签页无关,请将其设为 -1。
-
timeStamp
number
触发此信号的时间(以毫秒为单位,从 Epoch 起算)。
-
请求的资源将如何使用。
-
网址
字符串
-
-
onRequest
提供由 addRules
、removeRules
和 getRules
组成的声明式事件 API。
操作