说明
chrome.declarativeNetRequest
API 用于通过指定声明式规则来屏蔽或修改网络请求。这样,扩展程序就可以修改网络请求,而无需拦截和查看其内容,从而提供更高的隐私保护。
权限
declarativeNetRequest
declarativeNetRequestWithHostAccess
“declarativeNetRequest
”和“declarativeNetRequestWithHostAccess
”权限提供相同的功能。两者之间的区别在于请求或授予权限的时间。
"declarativeNetRequest"
- 会在安装时触发权限警告,但会提供对
allow
、allowAllRequests
和block
规则的隐式访问权限。请尽可能使用此方法,以免需要向主持人申请完整访问权限。 "declarativeNetRequestFeedback"
- 为已解压缩的扩展程序启用调试功能,具体而言是
getMatchedRules()
和onRuleMatchedDebug
。 "declarativeNetRequestWithHostAccess"
- 安装时不会显示权限警告,但您必须先请求主机权限,然后才能对主机执行任何操作。如果您想在已拥有主机权限且不会生成其他警告的扩展程序中使用声明式网络请求规则,则此方法非常适用。
可用性
清单
除了前面介绍的权限之外,某些类型的规则集(尤其是静态规则集)还需要声明 "declarative_net_request"
清单键,该键应为包含一个名为 "rule_resources"
的键的字典。此键是一个数组,其中包含类型为 Ruleset
的字典,如下所示。(请注意,“Ruleset”名称不会显示在清单的 JSON 中,因为它只是一个数组。)本文档后面部分介绍了静态规则集。
{
"name": "My extension",
...
"declarative_net_request" : {
"rule_resources" : [{
"id": "ruleset_1",
"enabled": true,
"path": "rules_1.json"
}, {
"id": "ruleset_2",
"enabled": false,
"path": "rules_2.json"
}]
},
"permissions": [
"declarativeNetRequest",
"declarativeNetRequestFeedback",
],
"host_permissions": [
"http://www.blogger.com/*",
"http://*.google.com/*"
],
...
}
规则和规则集
如需使用此 API,请指定一个或多个规则集。规则集包含一组规则。单个规则会执行以下操作之一:
- 屏蔽网络请求。
- 升级架构(http 到 https)。
- 通过否定任何匹配的已屏蔽规则,防止请求被屏蔽。
- 重定向网络请求。
- 修改请求或响应标头。
规则集有三种类型,管理方式略有不同。
- 动态
- 会跨浏览器会话和扩展程序升级保留,并且在扩展程序使用期间使用 JavaScript 进行管理。
- 会话
- 在浏览器关闭和安装扩展程序的新版本时清除。在使用扩展程序时,会使用 JavaScript 管理会话规则。
- 静态
- 在安装或升级扩展程序时打包、安装和更新。静态规则存储在 JSON 格式的规则文件中,并在清单文件中列出。
动态规则集和会话级范围的规则集
在使用扩展程序时,动态规则集和会话规则集是使用 JavaScript 进行管理的。
- 动态规则会在浏览器会话和扩展程序升级之间保持不变。
- 当浏览器关闭以及安装扩展程序的新版本时,系统会清除会话规则。
每种规则集类型只有一个。只要未超出规则限制,扩展程序就可以通过调用 updateDynamicRules()
和 updateSessionRules()
来动态向其添加或移除规则。如需了解规则限制,请参阅规则限制。您可以在代码示例下查看此示例。
静态规则集
与动态规则和会话规则不同,静态规则会在安装或升级扩展程序时打包、安装和更新。这些规则以 JSON 格式存储在规则文件中,并使用 "declarative_net_request"
和 "rule_resources"
键(如上所述)以及一个或多个 Ruleset
字典向扩展程序指明。Ruleset
字典包含规则文件的路径、文件中包含的规则集的 ID,以及规则集是启用还是停用。在程序化启用或停用规则集时,后两个参数非常重要。
{
...
"declarative_net_request" : {
"rule_resources" : [{
"id": "ruleset_1",
"enabled": true,
"path": "rules_1.json"
},
...
]
}
...
}
如需测试规则文件,请以未打包的形式加载您的扩展程序。系统只会针对已解压缩的扩展程序显示有关无效静态规则的错误和警告。系统会忽略已打包扩展程序中的无效静态规则。
加快审核
对静态规则集所做的更改或许可以加速审核。请参阅针对符合条件的更改申请快速审核。
启用和停用静态规则和规则集
在运行时,可以启用或停用单个静态规则和完整的静态规则集。
一组已启用的静态规则和规则集会在浏览器会话之间保留。这两种规则在扩展程序更新后都不会保留,这意味着只有您选择保留在规则文件中的规则在更新后才可用。
出于性能方面的原因,同时启用的规则和规则集的数量也有限制。调用 getAvailableStaticRuleCount()
可查看可以启用的其他规则的数量。如需了解规则限制,请参阅规则限制。
如需启用或停用静态规则,请调用 updateStaticRules()
。此方法接受 UpdateStaticRulesOptions
对象,该对象包含要启用或停用的规则的 ID 数组。这些 ID 使用 Ruleset
字典的 "id"
键进行定义。停用的静态规则的上限为 5,000 条。
如需启用或停用静态规则集,请调用 updateEnabledRulesets()
。此方法接受 UpdateRulesetOptions
对象,该对象包含要启用或停用的规则集的 ID 数组。这些 ID 使用 Ruleset
字典的 "id"
键进行定义。
构建规则
无论类型如何,规则都以四个字段开头,如下所示。虽然 "id"
和 "priority"
键接受数字,但 "action"
和 "condition"
键可以提供多个屏蔽和重定向条件。以下规则会阻止 "foo.com"
发出的所有脚本请求,这些请求的目标网址包含 "abc"
作为子字符串。
{
"id" : 1,
"priority": 1,
"action" : { "type" : "block" },
"condition" : {
"urlFilter" : "abc",
"initiatorDomains" : ["foo.com"],
"resourceTypes" : ["script"]
}
}
网址匹配
声明式网络请求支持使用模式匹配语法或正则表达式匹配网址。
网址过滤条件语法
规则的 "condition"
键允许使用 "urlFilter"
键对指定网域下的网址执行操作。您可以使用模式匹配令牌创建模式。以下是一些示例。
urlFilter |
配对 | 不匹配 |
---|---|---|
"abc" |
https://abcd.com https://example.com/abcd |
https://ab.com |
"abc*d" |
https://abcd.com https://example.com/abcxyzd |
https://abc.com |
"||a.example.com" |
https://a.example.com/ https://b.a.example.com/xyz https://a.example.company |
https://example.com/ |
"|https*" |
https://example.com | http://example.com/ http://https.com |
"example*^123|" |
https://example.com/123 http://abc.com/example?123 |
https://example.com/1234 https://abc.com/example0123 |
正则表达式
条件还可以使用正则表达式。请参阅 "regexFilter"
键。如需了解适用于这些条件的限制,请参阅使用正则表达式的规则。
编写良好的网址条件
编写规则时,请务必始终匹配整个网域。否则,您的规则可能会在意外的情况下匹配。例如,使用模式匹配语法时:
google.com
与https://example.com/?param=google.com
不正确匹配||google.com
与https://google.company
不正确匹配https://www.google.com
与https://example.com/?param=https://www.google.com
不正确匹配
建议使用:
||google.com/
,与所有路径和所有子网域匹配。|https://www.google.com/
,用于匹配所有路径,不匹配任何子网域。
同样,使用 ^
和 /
字符可以将正则表达式锚定。例如,^https:\/\/www\.google\.com\/
与 https://www.google.com 上的任何路径匹配。
规则评估
浏览器会在网络请求生命周期的各个阶段应用 DNR 规则。
请求之前
在发出请求之前,扩展程序可以使用匹配的规则屏蔽或重定向(包括将架构从 HTTP 升级到 HTTPS)该请求。
对于每个扩展程序,浏览器都会确定一组匹配规则。此处未包含使用 modifyHeaders
操作的规则,因为这些规则将在稍后处理。此外,系统会在稍后(有响应标头可用时)考虑包含 responseHeaders
条件的规则,而不会将其包含在内。
然后,对于每个扩展程序,Chrome 每个请求最多只会选择一个候选扩展程序。Chrome 会按优先级对所有匹配规则进行排序,以便找到匹配规则。优先级相同的规则会按操作排序(allow
或 allowAllRequests
> block
> upgradeScheme
> redirect
)。
如果候选规则是 allow
或 allowAllRequests
规则,或者发出请求的帧之前与此扩展程序中优先级更高或等同的 allowAllRequests
规则匹配,则请求会被“允许”,并且扩展程序对请求没有任何影响。
如果有多个扩展程序想要屏蔽或重定向此请求,系统会选择一项要执行的操作。Chrome 会按以下顺序对规则进行排序:block
> redirect
或 upgradeScheme
> allow
或 allowAllRequests
。如果两个规则属于同一类型,Chrome 会选择最近安装的扩展程序中的规则。
在发送请求标头之前
在 Chrome 向服务器发送请求标头之前,系统会根据匹配的 modifyHeaders
规则更新这些标头。
在单个扩展程序中,Chrome 会通过查找所有匹配的 modifyHeaders
规则来构建要执行的修改列表。与之前类似,系统只会包含优先级高于任何匹配的 allow
或 allowAllRequests
规则的规则。
Chrome 会按顺序应用这些规则,因此系统始终会先评估安装时间较短的扩展程序中的规则,然后再评估安装时间较长的扩展程序中的规则。此外,一个扩展程序中优先级较高的规则始终会在同一扩展程序中优先级较低的规则之前应用。值得注意的是,即使在扩展程序之间,也会出现以下情况:
- 如果某条规则附加到某个标头,则优先级较低的规则只能附加到该标头。不允许执行设置和移除操作。
- 如果某条规则设置了标头,则只有来自同一扩展程序的优先级较低的规则才能附加到该标头。不允许进行任何其他修改。
- 如果某条规则移除了某个标头,则优先级较低的规则无法进一步修改该标头。
收到回复后
收到响应标头后,Chrome 会评估包含 responseHeaders
条件的规则。
按 action
和 priority
对这些规则进行排序,并排除因匹配的 allow
或 allowAllRequests
规则而变得多余的所有规则(这与“请求之前”部分中的步骤完全相同)后,Chrome 可能会代表扩展程序屏蔽或重定向请求。
请注意,如果请求到达此阶段,则表示该请求已发送到服务器,并且服务器已收到请求正文等数据。包含响应标头条件的屏蔽或重定向规则仍会运行,但无法实际屏蔽或重定向请求。
如果是屏蔽规则,则由发出请求并收到被屏蔽响应的网页进行处理,Chrome 会提前终止请求。对于重定向规则,Chrome 会向重定向的网址发出新请求。请务必考虑这些行为是否符合您的扩展程序的隐私权预期。
如果请求未被屏蔽或重定向,Chrome 会应用任何 modifyHeaders
规则。对响应标头应用修改的方式与“在发送请求标头之前”中所述的方式相同。由于请求已发出,因此对请求标头应用修改不会产生任何效果。
安全规则
安全规则是指操作为 block
、allow
、allowAllRequests
或 upgradeScheme
的规则。这些规则的动态规则配额会增加。
规则限制
在浏览器中加载和评估规则会产生性能开销,因此在使用该 API 时会受到一些限制。具体限制取决于您使用的规则类型。
静态规则
静态规则是指在清单文件中声明的规则文件中指定的规则。扩展程序可以在 "rule_resources"
清单键中指定最多 100 个静态规则集,但一次只能启用其中 50 个规则集。后者称为 MAX_NUMBER_OF_ENABLED_STATIC_RULESETS
。这些规则集总计至少包含 3 万条规则。这称为 GUARANTEED_MINIMUM_STATIC_RULES
。
之后可用的规则数量取决于用户浏览器中安装的所有扩展程序启用的规则数量。您可以在运行时通过调用 getAvailableStaticRuleCount()
找到此编号。您可以在代码示例下查看此示例。
会话规则
一个扩展程序最多可以有 5,000 条会话规则。这会显示为 MAX_NUMBER_OF_SESSION_RULES
。
在 Chrome 120 之前,动态规则和会话规则的总数上限为 5, 000 条。
动态规则
一个扩展程序可以包含至少 5,000 条动态规则。这会显示为 MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES
。
从 Chrome 121 开始,安全动态规则的规则数上限更高,可达到 3 万个,以 MAX_NUMBER_OF_DYNAMIC_RULES
的形式公开。在 5,000 个限制内添加的任何不安全规则也会计入此限制。
在 Chrome 120 之前,动态规则和会话规则的总数上限为 5, 000 条。
使用正则表达式的规则
所有类型的规则都可以使用正则表达式;不过,每种类型的正则表达式规则的总数不得超过 1, 000 条。这称为 MAX_NUMBER_OF_REGEX_RULES。
此外,每个规则在编译后必须小于 2KB。这与规则的复杂性大致相关。如果您尝试加载超出此限制的规则,则会看到类似以下内容的警告,并且系统会忽略该规则。
rules_1.json: Rule with id 1 specified a more complex regex than allowed
as part of the "regexFilter" key.
与 Service Worker 的交互
declarativeNetRequest 仅适用于到达网络堆栈的请求。这包括来自 HTTP 缓存的响应,但可能不包括通过服务工件的 onfetch
处理脚本传递的响应。declarativeNetRequest 不会影响由服务工件生成或从 CacheStorage
检索的响应,但会影响对服务工件中 fetch()
的调用。
适合网络的无障碍资源
declarativeNetRequest 规则无法将公共资源请求重定向到无法通过 Web 访问的资源。否则,系统会触发错误。即使指定的网络可访问资源归重定向扩展程序所有,也是如此。如需为 declarativeNetRequest 声明资源,请使用清单的 "web_accessible_resources"
数组。
标头修改
仅支持对以下标头执行附加操作:accept
、accept-encoding
、accept-language
、access-control-request-headers
、cache-control
、connection
、content-language
、cookie
、forwarded
、if-match
、if-none-match
、keep-alive
、range
、te
、trailer
、transfer-encoding
、upgrade
、user-agent
、via
、want-digest
、x-forwarded-for
。
示例
代码示例
更新动态规则
以下示例展示了如何调用 updateDynamicRules()
。updateSessionRules()
的流程也是一样的。
// Get arrays containing new and old rules
const newRules = await getNewRules();
const oldRules = await chrome.declarativeNetRequest.getDynamicRules();
const oldRuleIds = oldRules.map(rule => rule.id);
// Use the arrays to update the dynamic rules
await chrome.declarativeNetRequest.updateDynamicRules({
removeRuleIds: oldRuleIds,
addRules: newRules
});
更新静态规则集
以下示例展示了如何启用和停用规则集,同时考虑可用静态规则集的数量和已启用静态规则集的数量上限。如果您需要的静态规则数量超出了允许的数量,则需要执行此操作。为此,您应在安装部分规则集的同时停用部分规则集(在清单文件中将 "Enabled"
设置为 false
)。
async function updateStaticRules(enableRulesetIds, disableCandidateIds) {
// Create the options structure for the call to updateEnabledRulesets()
let options = { enableRulesetIds: enableRulesetIds }
// Get the number of enabled static rules
const enabledStaticCount = await chrome.declarativeNetRequest.getEnabledRulesets();
// Compare rule counts to determine if anything needs to be disabled so that
// new rules can be enabled
const proposedCount = enableRulesetIds.length;
if (enabledStaticCount + proposedCount > chrome.declarativeNetRequest.MAX_NUMBER_OF_ENABLED_STATIC_RULESETS) {
options.disableRulesetIds = disableCandidateIds
}
// Update the enabled static rules
await chrome.declarativeNetRequest.updateEnabledRulesets(options);
}
规则示例
以下示例说明了 Chrome 如何对扩展程序中的规则进行排序。在查看这些规则时,您可能需要在单独的窗口中打开优先级规则。
“priority”键
这些示例需要对 *://*.example.com/*
具有主机权限。
如需确定特定网址的优先级,请查看(开发者定义的)"priority"
键、"action"
键和 "urlFilter"
键。这些示例引用了下方显示的示例规则文件。
- 导航到 https://google.com
- 有 2 条规则涵盖此网址:ID 为 1 和 4 的规则。系统会应用 ID 为 1 的规则,因为
"block"
操作的优先级高于"redirect"
操作。其余规则不适用,因为它们适用于网址长度较长的情况。 - 导航到 https://google.com/1234
- 由于网址更长,除了 ID 为 1 和 4 的规则外,ID 为 2 的规则现在也匹配。系统会应用 ID 为 2 的规则,因为
"allow"
的优先级高于"block"
和"redirect"
。 - 导航到 https://google.com/12345
- 这四条规则都与此网址匹配。系统会应用 ID 为 3 的规则,因为该规则由开发者指定的优先级是该组中最高的。
[
{
"id": 1,
"priority": 1,
"action": { "type": "block" },
"condition": {"urlFilter": "||google.com/", "resourceTypes": ["main_frame"] }
},
{
"id": 2,
"priority": 1,
"action": { "type": "allow" },
"condition": { "urlFilter": "||google.com/123", "resourceTypes": ["main_frame"] }
},
{
"id": 3,
"priority": 2,
"action": { "type": "block" },
"condition": { "urlFilter": "||google.com/12345", "resourceTypes": ["main_frame"] }
},
{
"id": 4,
"priority": 1,
"action": { "type": "redirect", "redirect": { "url": "https://example.com" } },
"condition": { "urlFilter": "||google.com/", "resourceTypes": ["main_frame"] }
},
]
重定向
以下示例需要对 *://*.example.com/*
的主机权限。
以下示例展示了如何将请求从 example.com 重定向到扩展程序本身中的某个页面。扩展程序路径 /a.jpg
会解析为 chrome-extension://EXTENSION_ID/a.jpg
,其中 EXTENSION_ID
是扩展程序的 ID。为此,清单应将 /a.jpg
声明为可通过 Web 访问的资源。
{
"id": 1,
"priority": 1,
"action": { "type": "redirect", "redirect": { "extensionPath": "/a.jpg" } },
"condition": {
"urlFilter": "||https://www.example.com/",
"resourceTypes": ["main_frame"]
}
}
以下代码使用 "transform"
键重定向到 example.com 的子网域。它使用域名锚点(“||”)来拦截来自 example.com 的任何架构的请求。"transform"
中的 "scheme"
键指定重定向到子网域时将始终使用“https”。
{
"id": 1,
"priority": 1,
"action": {
"type": "redirect",
"redirect": {
"transform": { "scheme": "https", "host": "new.example.com" }
}
},
"condition": {
"urlFilter": "||example.com/",
"resourceTypes": ["main_frame"]
}
}
以下示例使用正则表达式从 https://www.abc.xyz.com/path
重定向到 https://abc.xyz.com/path
。在 "regexFilter"
键中,请注意如何转义英文句点,以及捕获组选择“abc”或“def”。"regexSubstitution"
键使用“\1”指定正则表达式返回的第一个匹配项。在本例中,系统会从重定向的网址中捕获“abc”,并将其放入替换项中。
{
"id": 1,
"priority": 1,
"action": {
"type": "redirect",
"redirect": {
"regexSubstitution": "https://\\1.xyz.com/"
}
},
"condition": {
"regexFilter": "^https://www\\.(abc|def)\\.xyz\\.com/",
"resourceTypes": [
"main_frame"
]
}
}
标头
以下示例会从主框架和所有子框架中移除所有 Cookie。
{
"id": 1,
"priority": 1,
"action": {
"type": "modifyHeaders",
"requestHeaders": [{ "header": "cookie", "operation": "remove" }]
},
"condition": { "resourceTypes": ["main_frame", "sub_frame"] }
}
类型
DomainType
这描述了相应请求相对于其发源帧而言是第一方还是第三方请求。如果请求的网域 (eTLD+1) 与发起请求的帧相同,则该请求被视为第一方请求。
枚举
“firstParty”
网络请求是其发源帧的第一方请求。
“thirdParty”
网络请求是其发起帧的第三方。
ExtensionActionOptions
属性
-
displayActionCountAsBadgeText
布尔值(可选)
是否自动将网页的操作数显示为扩展程序的标记文本。此偏好设置会在各个会话间持久保留。
-
tabUpdateChrome 89 及更高版本
有关如何调整标签页操作数的详细信息。
GetDisabledRuleIdsOptions
属性
-
rulesetId
字符串
与静态
Ruleset
对应的 ID。
GetRulesFilter
属性
-
ruleIds
number[] 可选
如果指定,则仅包含 ID 匹配的规则。
HeaderInfo
属性
-
excludedValues
string[] 可选
如果指定了此属性,则如果标头存在,但其值包含此列表中的至少一个元素,则不匹配此条件。这与
values
使用相同的匹配模式语法。 -
header
字符串
标头的名称。仅当未指定
values
和excludedValues
时,此条件才会按名称进行匹配。 -
values
string[] 可选
如果指定了此属性,则当标题的值与此列表中的至少一个模式匹配时,此条件才会匹配。这支持不区分大小写的标头值匹配,以及以下构造:
“*”:匹配任意数量的字符。
'?':匹配零个或一个字符。
可以使用反斜杠对“*”和“?”进行转义,例如“\*”和“\?”
HeaderOperation
这介绍了“modifyHeaders”规则的可能操作。
枚举
“append”
为指定标头添加新条目。请求标头不支持此操作。
“set”
为指定标头设置新值,并移除所有名称相同的现有标头。
“remove”
移除指定标头的所有条目。
IsRegexSupportedResult
属性
-
isSupported
布尔值
-
reason
UnsupportedRegexReason(不支持正则表达式的原因)可选
指定不支持正则表达式的原因。仅当
isSupported
为 false 时提供。
MatchedRule
属性
-
ruleId
数值
匹配规则的 ID。
-
rulesetId
字符串
此规则所属的
Ruleset
的 ID。对于源自一组动态规则的规则,此值将等于DYNAMIC_RULESET_ID
。
MatchedRuleInfo
属性
-
规则
-
tabId
数值
发起请求时所用标签页的 tabId(如果该标签页仍处于活动状态)。否则为 -1。
-
timeStamp
数值
规则匹配的时间。时间戳将遵循 Javascript 时间惯例,即自公元纪年以来的毫秒数。
MatchedRuleInfoDebug
属性
-
request
与规则匹配的请求的详细信息。
-
规则
MatchedRulesFilter
属性
-
minTimeStamp
number 可选
如果指定,则仅匹配给定时间戳之后的规则。
-
tabId
number 可选
如果指定,则仅匹配给定标签页的规则。如果设置为 -1,则与未与任何活跃标签页相关联的规则匹配。
ModifyHeaderInfo
属性
-
header
字符串
要修改的标头的名称。
-
要对标题执行的操作。
-
值
字符串(选填)
标头的新值。必须为
append
和set
操作指定。
QueryKeyValue
属性
-
键
字符串
-
replaceOnly
布尔值(可选)
Chrome 94 及更高版本如果为 true,则仅在查询键已存在时才会替换该键。否则,如果缺少该键,系统也会添加该键。默认值为 false。
-
值
字符串
QueryTransform
属性
-
addOrReplaceParams
QueryKeyValue[] 可选
要添加或替换的查询键值对的列表。
-
removeParams
string[] 可选
要移除的查询键的列表。
Redirect
属性
-
extensionPath
字符串(选填)
相对于扩展程序目录的路径。应以“/”开头。
-
regexSubstitution
字符串(选填)
指定
regexFilter
的规则的替换模式。网址中regexFilter
的第一个匹配项将替换为此模式。在regexSubstitution
中,可以使用通过反斜杠转义的数字(\1 到 \9)来插入相应的捕获组。\0 是指整个匹配文本。 -
转换
URLTransform(可选)
要执行的网址转换。
-
网址
字符串(选填)
重定向网址。不允许重定向到 JavaScript 网址。
RegexOptions
属性
-
isCaseSensitive
布尔值(可选)
指定的
regex
是否区分大小写。默认值为 true。 -
regex
字符串
要检查的正则表达式。
-
requireCapturing
布尔值(可选)
指定的
regex
是否需要捕获。只有指定了regexSubstition
操作的重定向规则才需要进行捕获。默认值为 false。
RequestDetails
属性
-
documentId
字符串(选填)
Chrome 106 及更高版本如果此请求针对的是帧,则为帧文档的唯一标识符。
-
documentLifecycleChrome 106 及更高版本
帧文档的生命周期(如果此请求是针对帧)。
-
frameId
数值
值 0 表示请求发生在主帧中;正值表示请求发生的子帧的 ID。如果已加载(子)帧的文档(
type
为main_frame
或sub_frame
),frameId
表示此帧的 ID,而不是外部帧的 ID。帧 ID 在标签页中是唯一的。 -
frameType
FrameType(帧类型)可选
Chrome 106 及更高版本帧的类型(如果此请求是针对帧)。
-
发起者
字符串(选填)
发起请求的来源。这不会因重定向而改变。如果这是不透明的来源,则系统会使用字符串“null”。
-
method
字符串
标准 HTTP 方法。
-
parentDocumentId
字符串(选填)
Chrome 106 及更高版本帧的父文档的唯一标识符(如果此请求针对的是帧且具有父级)。
-
parentFrameId
数值
封装发送请求的帧的帧 ID。如果不存在父级帧,则设置为 -1。
-
requestId
字符串
请求的 ID。请求 ID 在浏览器会话中是唯一的。
-
tabId
数值
发出请求的标签页的 ID。如果请求与标签页无关,请将其设置为 -1。
-
类型
请求的资源类型。
-
网址
字符串
请求的网址。
RequestMethod
这描述了网络请求的 HTTP 请求方法。
枚举
“connect”
“delete”
“get”
"head"
"options"
"patch"
"post"
“put”
“other”
ResourceType
用于描述网络请求的资源类型。
枚举
"main_frame"
"sub_frame"
"stylesheet"
"script"
"image"
"font"
"object"
"xmlhttprequest"
“ping”
"csp_report"
"media"
"websocket"
"webtransport"
"webbundle"
“other”
Rule
属性
-
action
当此规则匹配时要执行的操作。
-
condition
触发此规则的条件。
-
id
数值
用于唯一标识规则的 ID。必填,应大于等于 1。
-
优先级
number 可选
规则优先级。默认为1。如果指定,应为 >= 1。
RuleAction
属性
-
重定向
重定向(可选)
说明应如何执行重定向。仅适用于重定向规则。
-
requestHeaders
ModifyHeaderInfo[] 可选
Chrome 86 及更高版本要为请求修改的请求标头。仅当 RuleActionType 为“modifyHeaders”时才有效。
-
responseHeaders
ModifyHeaderInfo[] 可选
Chrome 86 及更高版本要为请求修改的响应标头。仅当 RuleActionType 为“modifyHeaders”时才有效。
-
要执行的操作的类型。
RuleActionType
描述在给定 RuleCondition 匹配时要执行的操作类型。
枚举
“block”
屏蔽网络请求。
“redirect”
重定向网络请求。
“allow”
允许网络请求。如果存在与请求匹配的允许规则,系统将不会拦截该请求。
"upgradeScheme"
如果请求是 http 或 ftp,则将网络请求网址的架构升级为 https。
"modifyHeaders"
修改网络请求中的请求/响应标头。
“allowAllRequests”
允许框架层次结构中的所有请求,包括框架请求本身。
RuleCondition
属性
-
domainType
DomainType(域名类型)可选
指定网络请求是来自其来源网域的第一方请求还是第三方请求。如果省略,则系统会接受所有请求。
-
网域
string[] 可选
自 Chrome 101 起已废弃请改用
initiatorDomains
该规则仅会与来自
domains
列表的网络请求匹配。 -
excludedDomains
string[] 可选
自 Chrome 101 起已废弃该规则不会与来自
excludedDomains
列表的网络请求匹配。 -
excludedInitiatorDomains
string[] 可选
Chrome 101 及更高版本该规则不会匹配来自
excludedInitiatorDomains
列表的网络请求。如果列表为空或未指定,则不会排除任何网域。此属性的优先级高于initiatorDomains
。注意:
- 也允许使用“a.example.com”等子网域。
- 条目只能包含 ASCII 字符。
- 对国际化网域使用 Punycode 编码。
- 这与请求发起者(而非请求网址)匹配。
- 列出的网域的子网域也会被排除。
-
excludedRequestDomains
string[] 可选
Chrome 101 及更高版本如果域名与
excludedRequestDomains
列表中的某个域名匹配,则该规则不会与网络请求匹配。如果列表为空或未指定,则不会排除任何网域。此属性的优先级高于requestDomains
。注意:
- 也允许使用“a.example.com”等子网域。
- 条目只能包含 ASCII 字符。
- 对国际化网域使用 Punycode 编码。
- 列出的网域的子网域也会被排除。
-
excludedRequestMethods
RequestMethod[] 可选
Chrome 91 及更高版本规则不匹配的请求方法的列表。应仅指定
requestMethods
和excludedRequestMethods
中的一项。如果未指定这两者,则匹配所有请求方法。 -
excludedResourceTypes
ResourceType[] 可选
规则不匹配的资源类型的列表。应仅指定
resourceTypes
和excludedResourceTypes
中的一项。如果未指定这两者,系统会屏蔽除“main_frame”之外的所有资源类型。 -
excludedResponseHeaders
HeaderInfo[] 可选
Chrome 128 及更高版本如果请求与此列表中的任何响应标头条件(如果有)匹配,则规则不匹配。如果同时指定了
excludedResponseHeaders
和responseHeaders
,则excludedResponseHeaders
属性优先。 -
excludedTabIds
number[] 可选
Chrome 92 及更高版本规则不应匹配的
tabs.Tab.id
的列表。如果 ID 为tabs.TAB_ID_NONE
,则会排除并非从标签页发起的请求。仅适用于会话级范围的规则。 -
initiatorDomains
string[] 可选
Chrome 101 及更高版本该规则仅会与来自
initiatorDomains
列表的网络请求匹配。如果省略该列表,则规则会应用于来自所有网域的请求。不允许使用空列表。注意:
- 也允许使用“a.example.com”等子网域。
- 条目只能包含 ASCII 字符。
- 对国际化网域使用 Punycode 编码。
- 这与请求发起者(而非请求网址)匹配。
- 系统还会匹配所列网域的子网域。
-
isUrlFilterCaseSensitive
布尔值(可选)
urlFilter
或regexFilter
(无论哪个)是否区分大小写。默认值为 false。 -
regexFilter
字符串(选填)
用于与广告联盟请求网址匹配的正则表达式。此表达式遵循 RE2 语法。
注意:只能指定
urlFilter
或regexFilter
中的一项。注意:
regexFilter
只能由 ASCII 字符组成。系统会将此值与网址进行匹配,其中主机采用 Punycode 格式进行编码(如果是国际化域名),并且任何其他非 ASCII 字符均采用 UTF-8 进行网址编码。 -
requestDomains
string[] 可选
Chrome 101 及更高版本只有当网域与
requestDomains
列表中的网域匹配时,该规则才会与网络请求匹配。如果省略该列表,则规则会应用于来自所有网域的请求。不允许使用空列表。注意:
- 也允许使用“a.example.com”等子网域。
- 条目只能包含 ASCII 字符。
- 对国际化网域使用 Punycode 编码。
- 系统还会匹配所列网域的子网域。
-
requestMethods
RequestMethod[] 可选
Chrome 91 及更高版本规则可以匹配的 HTTP 请求方法的列表。不允许使用空列表。
注意:指定
requestMethods
规则条件也会排除非 HTTP(s) 请求,而指定excludedRequestMethods
则不会。 -
resourceTypes
ResourceType[] 可选
规则可以匹配的资源类型的列表。不允许使用空列表。
注意:对于
allowAllRequests
规则,必须指定此属性,并且只能包含sub_frame
和main_frame
资源类型。 -
responseHeaders
HeaderInfo[] 可选
Chrome 128 及更高版本如果请求与此列表中的任何响应标头条件(如果指定)匹配,则规则匹配。
-
tabIds
number[] 可选
Chrome 92 及更高版本规则应匹配的
tabs.Tab.id
的列表。ID 为tabs.TAB_ID_NONE
的请求与非来自标签页的请求匹配。不允许使用空列表。仅适用于会话级范围的规则。 -
urlFilter
字符串(选填)
与网络请求网址匹配的模式。支持的结构:
'*':通配符:匹配任意数量的字符。
'|':左侧/右侧锚点:如果在模式的任一端使用,则分别指定网址的开头/结尾。
'||':域名锚点:如果在模式开头处使用,则指定网址的(子)网域的开头。
'^':分隔符字符:除了字母、数字或以下各项之一(
_
、-
、.
或%
)之外,此字符可匹配任何内容。这也与网址的末尾匹配。因此,
urlFilter
由以下部分组成:(可选的左侧/域名锚点)+ 模式 +(可选的右侧锚点)。如果省略,则与所有网址进行匹配。不允许使用空字符串。
不允许使用以
||*
开头的模式。请改用*
。注意:只能指定
urlFilter
或regexFilter
中的一项。注意:
urlFilter
只能由 ASCII 字符组成。系统会将此值与网址进行匹配,其中主机采用 Punycode 格式进行编码(如果是国际化域名),并且任何其他非 ASCII 字符均采用 UTF-8 格式进行网址编码。例如,当请求网址为 http://abc.рф?q=ф 时,urlFilter
将与网址 http://abc.xn--p1ai/?q=%D1%84 进行匹配。
Ruleset
属性
-
已启用
布尔值
规则集是否默认处于启用状态。
-
id
字符串
用于唯一标识规则集的非空字符串。以“_”开头的 ID 预留给内部使用。
-
路径
字符串
JSON 规则集相对于扩展程序目录的路径。
RulesMatchedDetails
属性
-
rulesMatchedInfo
与指定过滤条件匹配的规则。
TabActionCountUpdate
属性
-
增加
数值
要将标签页的操作计数递增的量。负值会递减计数。
-
tabId
数值
要更新操作数的标签页。
TestMatchOutcomeResult
属性
-
matchedRules
与假设请求匹配的规则(如果有)。
TestMatchRequestDetails
属性
-
发起者
字符串(选填)
假想请求的发起者网址(如果有)。
-
method
RequestMethod(可选)
假设请求的标准 HTTP 方法。对于 HTTP 请求,默认为“get”;对于非 HTTP 请求,会被忽略。
-
responseHeaders
对象(可选)
Chrome 129 及更高版本如果请求在发送之前未被屏蔽或重定向,假想响应提供的标头。表示为将标头名称映射到字符串值列表的对象。如果未指定,假想的响应将返回空响应标头,这可以与针对标头不存在进行匹配的规则匹配。例如
{"content-type": ["text/html; charset=utf-8", "multipart/form-data"]}
-
tabId
number 可选
假想请求发生的标签页的 ID。无需与真实的标签页 ID 对应。默认值为 -1,表示请求与标签页无关。
-
类型
假想请求的资源类型。
-
网址
字符串
假想请求的网址。
UnsupportedRegexReason
说明不支持给定正则表达式的原因。
枚举
UpdateRuleOptions
属性
-
addRules
规则[] 可选
要添加的规则。
-
removeRuleIds
number[] 可选
要移除的规则的 ID。系统会忽略所有无效 ID。
UpdateRulesetOptions
属性
UpdateStaticRulesOptions
属性
URLTransform
属性
-
Fragment
字符串(选填)
请求的新 fragment。应为空(在这种情况下,系统会清除现有 fragment);或者应以“#”开头。
-
主机
字符串(选填)
请求的新主机。
-
密码
字符串(选填)
请求的新密码。
-
路径
字符串(选填)
请求的新路径。如果为空,则清除现有路径。
-
端口
字符串(选填)
请求的新端口。如果为空,则清除现有端口。
-
查询
字符串(选填)
请求的新查询。应为空(在这种情况下,系统会清除现有查询);或者应以“?”开头。
-
queryTransform
QueryTransform(可选)
添加、移除或替换查询键值对。
-
方案
字符串(选填)
请求的新架构。允许的值包括“http”“https”“ftp”和“chrome-extension”。
-
username
字符串(选填)
请求的新用户名。
属性
DYNAMIC_RULESET_ID
扩展程序添加的动态规则的规则集 ID。
值
"_dynamic"
GETMATCHEDRULES_QUOTA_INTERVAL
可进行 MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL getMatchedRules
调用的时长间隔,以分钟为单位。其他调用将立即失败并设置 runtime.lastError
。注意:与用户手势关联的 getMatchedRules
调用不受配额限制。
值
10
GUARANTEED_MINIMUM_STATIC_RULES
在已启用的静态规则集中,保证为扩展程序提供的静态规则的数量下限。超出此限制的任何规则都将计入全局静态规则数上限。
值
30000
MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL
在 GETMATCHEDRULES_QUOTA_INTERVAL
时间段内可以调用 getMatchedRules
的次数。
值
20
MAX_NUMBER_OF_DYNAMIC_RULES
扩展程序可以添加的动态规则的数量上限。
值
30000
MAX_NUMBER_OF_ENABLED_STATIC_RULESETS
扩展程序一次最多可启用静态 Rulesets
的数量上限。
值
50
MAX_NUMBER_OF_REGEX_RULES
扩展程序可以添加的正则表达式规则的数量上限。系统会针对一组动态规则和规则资源文件中指定的规则分别评估此限制。
值
1000
MAX_NUMBER_OF_SESSION_RULES
扩展程序可以添加的会话级范围规则的数量上限。
值
5000
MAX_NUMBER_OF_STATIC_RULESETS
扩展程序可以在 "rule_resources"
清单键中指定的静态 Rulesets
的数量上限。
值
100
MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES
扩展程序可以添加的“不安全”动态规则的数量上限。
值
5000
MAX_NUMBER_OF_UNSAFE_SESSION_RULES
扩展程序可以添加的“不安全”会话级范围规则的数量上限。
值
5000
SESSION_RULESET_ID
由扩展程序添加的会话级规则的规则集 ID。
值
"_session"
方法
getAvailableStaticRuleCount()
chrome.declarativeNetRequest.getAvailableStaticRuleCount(
callback?: function,
)
返回在达到全球静态规则数上限之前,扩展程序可以启用的静态规则数量。
参数
-
callback
函数(可选)
callback
参数如下所示:(count: number) => void
-
计数
数值
-
返回
-
Promise<number>
Chrome 91 及更高版本清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
getDisabledRuleIds()
chrome.declarativeNetRequest.getDisabledRuleIds(
options: GetDisabledRuleIdsOptions,
callback?: function,
)
返回给定 Ruleset
中当前已停用的静态规则列表。
参数
-
指定要查询的规则集。
-
callback
函数(可选)
callback
参数如下所示:(disabledRuleIds: number[]) => void
-
disabledRuleIds
number[]
-
返回
-
Promise<number[]>
清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
getDynamicRules()
chrome.declarativeNetRequest.getDynamicRules(
filter?: GetRulesFilter,
callback?: function,
)
返回扩展程序的当前一组动态规则。调用方可以选择通过指定 filter
来过滤提取的规则列表。
参数
-
filter
GetRulesFilter(可选)
Chrome 111 及更高版本用于过滤提取的规则列表的对象。
-
callback
函数(可选)
callback
参数如下所示:(rules: Rule[]) => void
-
规则
Rule[]
-
返回
-
Promise<Rule[]>
Chrome 91 及更高版本清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
getEnabledRulesets()
chrome.declarativeNetRequest.getEnabledRulesets(
callback?: function,
)
返回当前启用的一组静态规则集的 ID。
参数
-
callback
函数(可选)
callback
参数如下所示:(rulesetIds: string[]) => void
-
rulesetIds
字符串[]
-
返回
-
Promise<string[]>
Chrome 91 及更高版本清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
getMatchedRules()
chrome.declarativeNetRequest.getMatchedRules(
filter?: MatchedRulesFilter,
callback?: function,
)
返回与扩展程序匹配的所有规则。调用方可以选择通过指定 filter
来过滤匹配的规则列表。只有具有 "declarativeNetRequestFeedback"
权限或已针对 filter
中指定的 tabId
授予 "activeTab"
权限的扩展程序才能使用此方法。注意:系统不会返回与处于活动状态的文档相关联且匹配时间超过 5 分钟的规则。
参数
-
filter
用于过滤匹配规则列表的对象。
-
callback
函数(可选)
callback
参数如下所示:(details: RulesMatchedDetails) => void
-
详细信息
-
返回
-
Promise<RulesMatchedDetails>
Chrome 91 及更高版本清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
getSessionRules()
chrome.declarativeNetRequest.getSessionRules(
filter?: GetRulesFilter,
callback?: function,
)
返回扩展程序当前的一组会话级范围的规则。调用方可以选择通过指定 filter
来过滤提取的规则列表。
参数
-
filter
GetRulesFilter(可选)
Chrome 111 及更高版本用于过滤提取的规则列表的对象。
-
callback
函数(可选)
callback
参数如下所示:(rules: Rule[]) => void
-
规则
Rule[]
-
返回
-
Promise<Rule[]>
Chrome 91 及更高版本清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
isRegexSupported()
chrome.declarativeNetRequest.isRegexSupported(
regexOptions: RegexOptions,
callback?: function,
)
检查给定正则表达式是否支持用作 regexFilter
规则条件。
参数
-
regexOptions
要检查的正则表达式。
-
callback
函数(可选)
callback
参数如下所示:(result: IsRegexSupportedResult) => void
返回
-
Promise<IsRegexSupportedResult>
Chrome 91 及更高版本清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
setExtensionActionOptions()
chrome.declarativeNetRequest.setExtensionActionOptions(
options: ExtensionActionOptions,
callback?: function,
)
配置是否应将标签页的操作计数显示为扩展程序操作的标记文本,并提供用于递增该操作计数的方法。
参数
-
callback
函数(可选)
Chrome 89 及更高版本callback
参数如下所示:() => void
返回
-
Promise<void>
Chrome 91 及更高版本清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
testMatchOutcome()
chrome.declarativeNetRequest.testMatchOutcome(
request: TestMatchRequestDetails,
callback?: function,
)
检查扩展程序的任何 declarativeNetRequest 规则是否与假设请求匹配。注意:此方法仅适用于未打包的扩展程序,因为它仅适用于扩展程序开发期间。
参数
-
request
-
callback
函数(可选)
callback
参数如下所示:(result: TestMatchOutcomeResult) => void
返回
-
Promise<TestMatchOutcomeResult>
清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
updateDynamicRules()
chrome.declarativeNetRequest.updateDynamicRules(
options: UpdateRuleOptions,
callback?: function,
)
修改扩展程序的当前一组动态规则。系统会先移除 options.removeRuleIds
中列出的 ID 对应的规则,然后再添加 options.addRules
中指定的规则。注意:
- 此更新是作为单个原子操作进行的:要么添加并移除所有指定规则,要么返回错误。
- 这些规则会在浏览器会话和扩展程序更新之间保留。
- 无法使用此函数移除在扩展程序软件包中指定的静态规则。
MAX_NUMBER_OF_DYNAMIC_RULES
是扩展程序可以添加的动态规则的数量上限。不安全规则的数量不得超过MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES
。
参数
-
Chrome 87 及更高版本
-
callback
函数(可选)
callback
参数如下所示:() => void
返回
-
Promise<void>
Chrome 91 及更高版本清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
updateEnabledRulesets()
chrome.declarativeNetRequest.updateEnabledRulesets(
options: UpdateRulesetOptions,
callback?: function,
)
更新扩展程序的一组已启用的静态规则集。系统会先移除 options.disableRulesetIds
中列出的 ID 对应的规则集,然后再添加 options.enableRulesetIds
中列出的规则集。请注意,一组已启用的静态规则集会跨会话保留,但不会跨扩展程序更新保留,即 rule_resources
清单键将决定每次扩展程序更新时启用的静态规则集。
参数
-
Chrome 87 及更高版本
-
callback
函数(可选)
callback
参数如下所示:() => void
返回
-
Promise<void>
Chrome 91 及更高版本清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
updateSessionRules()
chrome.declarativeNetRequest.updateSessionRules(
options: UpdateRuleOptions,
callback?: function,
)
修改扩展程序当前的一组会话级范围的规则。系统会先移除 options.removeRuleIds
中列出的 ID 对应的规则,然后再添加 options.addRules
中指定的规则。注意:
- 此更新是作为单个原子操作进行的:要么添加并移除所有指定规则,要么返回错误。
- 这些规则不会在各个会话间持久保留,而是在内存中进行备份。
MAX_NUMBER_OF_SESSION_RULES
是扩展程序可以添加的会话规则的数量上限。
参数
-
callback
函数(可选)
callback
参数如下所示:() => void
返回
-
Promise<void>
Chrome 91 及更高版本清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
updateStaticRules()
chrome.declarativeNetRequest.updateStaticRules(
options: UpdateStaticRulesOptions,
callback?: function,
)
参数
-
callback
函数(可选)
callback
参数如下所示:() => void
返回
-
Promise<void>
清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。
事件
onRuleMatchedDebug
chrome.declarativeNetRequest.onRuleMatchedDebug.addListener(
callback: function,
)
当规则与请求匹配时触发。仅适用于具有 "declarativeNetRequestFeedback"
权限的已解压缩扩展程序,因为此命令仅用于调试目的。
参数
-
callback
函数
callback
参数如下所示:(info: MatchedRuleInfoDebug) => void