chrome.declarativeNetRequest

说明

chrome.declarativeNetRequest API 用于通过指定声明式规则来屏蔽或修改网络请求。这样,扩展程序就可以修改网络请求,而无需拦截和查看其内容,从而提供更高的隐私保护。

权限

declarativeNetRequest
declarativeNetRequestWithHostAccess

declarativeNetRequest”和“declarativeNetRequestWithHostAccess”权限提供相同的功能。两者之间的区别在于请求或授予权限的时间。

"declarativeNetRequest"
会在安装时触发权限警告,但会提供对 allowallowAllRequestsblock 规则的隐式访问权限。请尽可能使用此方法,以免需要向主持人申请完整访问权限。
"declarativeNetRequestFeedback"
已解压缩的扩展程序启用调试功能,具体而言是 getMatchedRules()onRuleMatchedDebug
"declarativeNetRequestWithHostAccess"
安装时不会显示权限警告,但您必须先请求主机权限,然后才能对主机执行任何操作。如果您想在已拥有主机权限且不会生成其他警告的扩展程序中使用声明式网络请求规则,则此方法非常适用。

可用性

Chrome 84 及以上版本

清单

除了前面介绍的权限之外,某些类��的规则集(尤其是静态规则集)还需要声明 "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.comhttps://example.com/?param=google.com 不正确匹配
  • ||google.comhttps://google.company 不正确匹配
  • https://www.google.comhttps://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 会按优先级对所有匹配规则进行排序,以便找到匹配规则。优先级相同的规则会按操作排序(allowallowAllRequests > block > upgradeScheme > redirect)。

如果候选规则是 allowallowAllRequests 规则,或者发出请求的帧之前与此扩展程序中优先级更高或等同的 allowAllRequests 规则匹配,则请求会被“允许”,并且扩展程序对请求没有任何影响。

如果有多个扩展程序想要屏蔽或重定向此请求,系统会选择一项要执行的操作。Chrome 会按以下顺序对规则进行排序:block > redirectupgradeScheme > allowallowAllRequests。如果两个规则属于同一类型,Chrome 会选择最近安装的扩展程序中的规则。

在发送请求标头之前

在 Chrome 向服务器发送请求标头之前,系统会根据匹配的 modifyHeaders 规则更新这些标头。

在单个扩展程序中,Chrome 会通过查找所有匹配的 modifyHeaders 规则来构建要执行的修改列表。与之前类似,系统只会包含优先级高于任何匹配的 allowallowAllRequests 规则的规则。

Chrome 会按顺序应用这些规则,因此系统始终会先评估安装时间较短的扩展程序中的规则,然后再评估安装时间较长的扩展程序中的规则。此外,一个扩展程序中优先级较高的规则始终会在同一扩展程序中优先级较低的规则之前应用。值得注意的是,即使在扩展程序之间,也会出现以下情况:

  • 如果某条规则附加到某个标头,则优先级较低的规则只能附加到该标头。不允许执行设置和移除操作。
  • 如果某条规则设置了标头,则只有来自同一扩展程序的优先级较低的规则才能附加到该标头。不允许进行任何其他修改。
  • 如果某条规则移除了某个标头,则优先级较低的规则无法进一步修改该标头。

收到回复后

收到响应标头后,Chrome 会评估包含 responseHeaders 条件的规则。

actionpriority 对这些规则进行排序,并排除因匹配的 allowallowAllRequests 规则而变得多余的所有规则(这与“请求之前”部分中的步骤完全相同)后,Chrome 可能会代表扩展程序屏蔽或重定向请求。

请注意,如果请求到达此阶段,则表示该请求已发送到服务器,并且服务器已收到请求正文等数据。包含响应标头条件的屏蔽或重定向规则仍会运行,但无法实际屏蔽或重定向请求。

如果是屏蔽规则,则由发出请求并收到被屏蔽响应的网页进行处理,Chrome 会提前终止请求。对于重定向规则,Chrome 会向重定向的网址发出新请求。请务必考虑这些行为是否符合您的扩展程序的隐私权预期。

如果请求未被屏蔽或重定向,Chrome 会应用任何 modifyHeaders 规则。对响应标头应用修改的方式与“在发送请求标头之前”中所述的方式相同。由于请求已发出,因此对请求标头应用修改不会产生任何效果。

安全规则

安全规则是指操作为 blockallowallowAllRequestsupgradeScheme 的规则。这些规则的动态规则配额会增加。

规则限制

在浏览器中加载和评估规则会产生性能开销,因此在使用该 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" 数组。

标头修改

仅支持对以下标头执行附加操作:acceptaccept-encodingaccept-languageaccess-control-request-headerscache-controlconnectioncontent-languagecookieforwardedif-matchif-none-matchkeep-aliverangetetrailertransfer-encodingupgradeuser-agentviawant-digestx-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

Chrome 88 及更高版本

属性

  • displayActionCountAsBadgeText

    布尔值(可选)

    是否自动将网页的操作数显示为扩展程序的标记文本。此偏好设置会在各个会话间持久保留。

  • tabUpdate
    Chrome 89 及更高版本

    有关如何调整标签页操作数的详细信息。

GetDisabledRuleIdsOptions

Chrome 111 及更高版本

属性

  • rulesetId

    字符串

    与静态 Ruleset 对应的 ID。

GetRulesFilter

Chrome 111 及更高版本

属性

  • ruleIds

    number[] 可选

    如果指定,则仅包含 ID 匹配的规则。

HeaderInfo

Chrome 128 及更高版本

属性

  • excludedValues

    string[] 可选

    如果指定了此属性,则如果标头存在,但其值包含此列表中的至少一个元素,则不匹配此条件。这与 values 使用相同的匹配模式语法。

  • header

    字符串

    标头的名称。仅当未指定 valuesexcludedValues 时,此条件才会按名称进行匹配。

  • values

    string[] 可选

    如果指定了此属性,则当标题的值与此列表中的至少一个模式匹配时,此条件才会匹配。这支持不区分大小写的标头值匹配,以及以下构造:

    “*”:匹配任意数量的字符。

    '?':匹配零个或一个字符。

    可以使用反斜杠对“*”和“?”进行转义,例如“\*”和“\?”

HeaderOperation

Chrome 86 及更高版本

这介绍了“modifyHeaders”规则的可能操作。

枚举

“append”
为指定标头添加新条目。请求标头不支持此操作。

“set”
为指定标头设置新值,并移除所有名称相同的现有标头。

“remove”
移除指定标头的所有条目。

IsRegexSupportedResult

Chrome 87 及更高版本

属性

  • isSupported

    布尔值

  • reason

    UnsupportedRegexReason(不支持正则表达式的原因)可选

    指定不支持正则表达式的原因。仅当 isSupported 为 false 时提供。

MatchedRule

属性

  • ruleId

    数值

    匹配规则的 ID。

  • rulesetId

    字符串

    此规则所属的 Ruleset 的 ID。对于源自一组动态规则的规则,此值将等于 DYNAMIC_RULESET_ID

MatchedRuleInfo

属性

  • 规则
  • tabId

    数值

    发起请求时所用标签页的 tabId(如果该标签页仍处于活动状态)。否则为 -1。

  • timeStamp

    数值

    规则匹配的时间。时间戳将遵循 Javascript 时间惯例,即自公元纪年以来的毫秒数。

MatchedRuleInfoDebug

属性

MatchedRulesFilter

属性

  • minTimeStamp

    number 可选

    如果指定,则仅匹配给定时间戳之后的规则。

  • tabId

    number 可选

    如果指定,则仅匹配给定标签页的规则。如果设置为 -1,则与未与任何活跃标签页相关联的规则匹配。

ModifyHeaderInfo

Chrome 86 及更高版本

属性

  • header

    字符串

    要修改的标头的名称。

  • 要对标题执行的操作。

  • 字符串(选填)

    标头的新值。必须为 appendset 操作指定。

QueryKeyValue

属性

  • 字符串

  • replaceOnly

    布尔值(可选)

    Chrome 94 及更高版本

    如果为 true,则仅在查询键已存在时才会替换该键。否则,如果缺少该键,系统也会添加该键。默认值为 false。

  • 字符串

QueryTransform

属性

  • addOrReplaceParams

    QueryKeyValue[] 可选

    要添加或替换的查询键值对的列表。

  • removeParams

    string[] 可选

    要移除的查询键的列表。

Redirect

属性

  • extensionPath

    字符串(选填)

    相对于扩展程序目录的路径。应以“/”开头。

  • regexSubstitution

    字符串(选填)

    指定 regexFilter 的规则的替换模式。网址中 regexFilter 的第一个匹配项将替换为此模式。在 regexSubstitution 中,可以使用通过反斜杠转义的数字(\1 到 \9)来插入相应的捕获组。\0 是指整个匹配文本。

  • 转换

    URLTransform(可选)

    要执行的网址转换。

  • 网址

    字符串(选填)

    重定向网址。不允许重定向到 JavaScript 网址。

RegexOptions

Chrome 87 及更高版本

属性

  • isCaseSensitive

    布尔值(可选)

    指定的 regex 是否区分大小写。默认值为 true。

  • regex

    字符串

    要检查的正则表达式。

  • requireCapturing

    布尔值(可选)

    指定的 regex 是否需要捕获。只有指定了 regexSubstition 操作的重定向规则才需要进行捕获。默认值为 false。

RequestDetails

属性

  • documentId

    字符串(选填)

    Chrome 106 及更高版本

    如果此请求针对的是帧,则为帧文档的唯一标识符。

  • documentLifecycle

    DocumentLifecycle(可选)

    Chrome 106 及更高版本

    帧文档的生命周期(如果此请求是针对帧)。

  • frameId

    数值

    值 0 表示请求发生在主帧中;正值表示请求发生的子帧的 ID。如果已加载(子)帧的文档(typemain_framesub_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

Chrome 91 及更高版本

这描述了网络请求的 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
    Chrome 86 及更高版本

    要为请求修改的请求标头。仅当 RuleActionType 为“modifyHeaders”时才有效。

  • responseHeaders
    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 起已废弃

    请改用 excludedInitiatorDomains

    该规则不会与来自 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 及更高版本

    规则不匹配的请求方法的列表。应仅指定 requestMethodsexcludedRequestMethods 中的一项。如果未指定这两者,则匹配所有请求方法。

  • excludedResourceTypes

    ResourceType[] 可选

    规则不匹配的资源类型的列表。应仅指定 resourceTypesexcludedResourceTypes 中的一项。如果未指定这两者,系统会屏蔽除“main_frame”之外的所有资源类型。

  • excludedResponseHeaders

    HeaderInfo[] 可选

    Chrome 128 及更高版本

    如果请求与此列表中的任何响应标头条件(如果有)匹配,则规则不匹配。如果同时指定了 excludedResponseHeadersresponseHeaders,则 excludedResponseHeaders 属性优先。

  • excludedTabIds

    number[] 可选

    Chrome 92 及更高版本

    规则不应匹配的 tabs.Tab.id 的列表。如果 ID 为 tabs.TAB_ID_NONE,则会排除并非从标签页发起的请求。仅适用于会话级范围的规则。

  • initiatorDomains

    string[] 可选

    Chrome 101 及更高版本

    该规则仅会与来自 initiatorDomains 列表的网络请求匹配。如果省略该列表,则规则会应用于来自所有网域的请求。不允许使用空列表。

    注意:

    • 也允许使用“a.example.com”等子网域。
    • 条目只能包含 ASCII 字符。
    • 对国际化网域使用 Punycode 编码。
    • 这与请求发起者(而非请求网址)匹配。
    • 系统还会匹配所列网域的子网域。
  • isUrlFilterCaseSensitive

    布尔值(可选)

    urlFilterregexFilter(无论哪个)是否区分大小写。默认值为 false。

  • regexFilter

    字符串(选填)

    用于与广告联盟请求网址匹配的正则表达式。此表达式遵循 RE2 语法

    注意:只能指定 urlFilterregexFilter 中的一项。

    注意: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_framemain_frame 资源类型。

  • responseHeaders

    HeaderInfo[] 可选

    Chrome 128 及更高版本

    如果请求与此列表中的任何响应标头条件(如果指定)匹配,则规则匹配。

  • tabIds

    number[] 可选

    Chrome 92 及更高版本

    规则应匹配的 tabs.Tab.id 的列表。ID 为 tabs.TAB_ID_NONE 的请求与非来自标签页的请求匹配。不允许使用空列表。仅适用于会话级范围的规则。

  • urlFilter

    字符串(选填)

    与网络请求网址匹配的模式。支持的结构:

    '*':通配符:匹配任意数量的字符。

    '|':左侧/右侧锚点:如果在模式的任一端使用,则分别指定网址的开头/结尾。

    '||':域名锚点:如果在模式开头处使用,则指定网址的(子)网域的开头。

    '^':分隔符字符:除了字母、数字或以下各项之一(_-.%)之外,此字符可匹配任何内容。这也与网址的末尾匹配。

    因此,urlFilter 由以下部分组成:(可选的左侧/域名锚点)+ 模式 +(可选的右侧锚点)。

    如果省略,则与所有网址进行匹配。不允许使用空字符串。

    不允许使用以 ||* 开头的模式。请改用 *

    注意:只能指定 urlFilterregexFilter 中的一项。

    注意:urlFilter 只能由 ASCII 字符组成。系统会将此值与网址进行匹配,其中主机采用 Punycode 格式进行编码(如果是国际化域名),并且任何其他非 ASCII 字符均采用 UTF-8 格式进行网址编码。例如,当请求网址为 http://abc.рф?q=ф 时,urlFilter 将与网址 http://abc.xn--p1ai/?q=%D1%84 进行匹配。

Ruleset

属性

  • 已启用

    布尔值

    规则集是否默认处于启用状态。

  • id

    字符串

    用于唯一标识规则集的非空字符串。以“_”开头的 ID 预留给内部使用。

  • 路径

    字符串

    JSON 规则集相对于扩展程序目录的路径。

RulesMatchedDetails

属性

  • rulesMatchedInfo

    与指定过滤条件匹配的规则。

TabActionCountUpdate

Chrome 89 及更高版本

属性

  • 增加

    数值

    要将标签页的操作计数递增的量。负值会递减计数。

  • tabId

    数值

    要更新操作数的标签页。

TestMatchOutcomeResult

Chrome 103 及更高版本

属性

  • matchedRules

    与假设请求匹配的规则(如果有)。

TestMatchRequestDetails

Chrome 103 及更高版本

属性

  • 发起者

    字符串(选填)

    假想请求的发起者网址(如果有)。

  • 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

Chrome 87 及更高版本

说明不支持给定正则表达式的原因。

枚举

“syntaxError”
正则表达式的语法不正确,或者使用了 RE2 语法中不支持的功能。

"memoryLimitExceeded"
正则表达式超出了内存上限。

UpdateRuleOptions

Chrome 87 及更高版本

属性

  • addRules

    规则[] 可选

    要添加的规则。

  • removeRuleIds

    number[] 可选

    要移除的规则的 ID。系统会忽略所有无效 ID。

UpdateRulesetOptions

Chrome 87 及更高版本

属性

  • disableRulesetIds

    string[] 可选

    与应停用的静态 Ruleset 对应的 ID 集。

  • enableRulesetIds

    string[] 可选

    与应启用的静态 Ruleset 对应的 ID 集。

UpdateStaticRulesOptions

Chrome 111 及更高版本

属性

  • disableRuleIds

    number[] 可选

    与要停用的 Ruleset 中的规则对应的 ID 集。

  • enableRuleIds

    number[] 可选

    与要启用的 Ruleset 中的规则对应的 ID 集。

  • rulesetId

    字符串

    与静态 Ruleset 对应的 ID。

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

Chrome 89 及更高版本

在已启用的静态规则集中,保证为扩展程序提供的静态规则的数量下限。超出此限制的任何规则都将计入全局静态规则数上限

30000

MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL

GETMATCHEDRULES_QUOTA_INTERVAL 时间段内可以调用 getMatchedRules 的次数。

20

MAX_NUMBER_OF_DYNAMIC_RULES

扩展程序可以添加的动态规则的数量上限。

30000

MAX_NUMBER_OF_ENABLED_STATIC_RULESETS

Chrome 94 及更高版本

扩展程序一次最多可启用静态 Rulesets 的数量上限。

50

MAX_NUMBER_OF_REGEX_RULES

扩展程序可以添加的正则表达式规则的数量上限。系统会针对一组动态规则和规则资源文件中指定的规则分别评估此限制。

1000

MAX_NUMBER_OF_SESSION_RULES

Chrome 120+

扩展程序可以添加的会话级范围规则的数量上限。

5000

MAX_NUMBER_OF_STATIC_RULESETS

扩展程序可以在 "rule_resources" 清单键中指定的静态 Rulesets 的数量上限。

100

MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES

Chrome 120+

扩展程序可以添加的“不安全”动态规则的数量上限。

5000

MAX_NUMBER_OF_UNSAFE_SESSION_RULES

Chrome 120+

扩展程序可以添加的“不安全”会话级范围规则的数量上限。

5000

SESSION_RULESET_ID

Chrome 90 及更高版本

由扩展程序添加的会话级规则的规则集 ID。

"_session"

方法

getAvailableStaticRuleCount()

Promise Chrome 89 及更高版本
chrome.declarativeNetRequest.getAvailableStaticRuleCount(
  callback?: function,
)

返回在达到全球静态规则数上限之前,扩展程序可以启用的静态规则数量。

参数

  • callback

    函数(可选)

    callback 参数如下所示:

    (count: number) => void

    • 计数

      数值

返回

  • Promise<number>

    Chrome 91 及更高版本

    清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。

getDisabledRuleIds()

Promise Chrome 111 及更高版本
chrome.declarativeNetRequest.getDisabledRuleIds(
  options: GetDisabledRuleIdsOptions,
  callback?: function,
)

返回给定 Ruleset 中当前已停用的静态规则列表。

参数

  • 指定要查询的规则集。

  • callback

    函数(可选)

    callback 参数如下所示:

    (disabledRuleIds: number[]) => void

    • disabledRuleIds

      number[]

返回

  • Promise<number[]>

    清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。

getDynamicRules()

prometido
chrome.declarativeNetRequest.getDynamicRules(
  filter?: GetRulesFilter,
  callback?: function,
)

返回扩展程序的当前一组动态规则。调用方可以选择通过指定 filter 来过滤提取的规则列表。

参数

  • filter

    GetRulesFilter(可选)

    Chrome 111 及更高版本

    用于过滤提取的规则列表的对象。

  • callback

    函数(可选)

    callback 参数如下所示:

    (rules: Rule[]) => void

返回

  • Promise<Rule[]>

    Chrome 91 及更高版本

    清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。

getEnabledRulesets()

prometido
chrome.declarativeNetRequest.getEnabledRulesets(
  callback?: function,
)

返回当前启用的一组静态规则集的 ID。

参数

  • callback

    函数(可选)

    callback 参数如下所示:

    (rulesetIds: string[]) => void

    • rulesetIds

      字符串[]

返回

  • Promise<string[]>

    Chrome 91 及更高版本

    清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。

getMatchedRules()

prometido
chrome.declarativeNetRequest.getMatchedRules(
  filter?: MatchedRulesFilter,
  callback?: function,
)

返回与扩展程序匹配的所有规则。调用方可以选择通过指定 filter 来过滤匹配的规则列表。只有具有 "declarativeNetRequestFeedback" 权限或已针对 filter 中指定的 tabId 授予 "activeTab" 权限的扩展程序才能使用此方法。注意:系统不会返回与处于活动状态的文档相关联且匹配时间超过 5 分钟的规则。

参数

返回

  • Chrome 91 及更高版本

    清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。

getSessionRules()

Promise Chrome 90 及更高版本
chrome.declarativeNetRequest.getSessionRules(
  filter?: GetRulesFilter,
  callback?: function,
)

返回扩展程序当前的一组会话级范围的规则。调用方可以选择通过指定 filter 来过滤提取的规则列表。

参数

  • filter

    GetRulesFilter(可选)

    Chrome 111 及更高版本

    用于过滤提取的规则列表的对象。

  • callback

    函数(可选)

    callback 参数如下所示:

    (rules: Rule[]) => void

返回

  • Promise<Rule[]>

    Chrome 91 及更高版本

    清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。

isRegexSupported()

Promise Chrome 87 及更高版本
chrome.declarativeNetRequest.isRegexSupported(
  regexOptions: RegexOptions,
  callback?: function,
)

检查给定正则表达式是否支持用作 regexFilter 规则条件。

参数

返回

  • Chrome 91 及更高版本

    清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。

setExtensionActionOptions()

Promise Chrome 88 及更高版本
chrome.declarativeNetRequest.setExtensionActionOptions(
  options: ExtensionActionOptions,
  callback?: function,
)

配置是否应将标签页的操作计数显示为扩展程序操作的标记文本,并提供用于递增该操作计数的方法。

参数

  • callback

    函数(可选)

    Chrome 89 及更高版本

    callback 参数如下所示:

    () => void

返回

  • Promise<void>

    Chrome 91 及更高版本

    清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。

testMatchOutcome()

Promise Chrome 103 及更高版本
chrome.declarativeNetRequest.testMatchOutcome(
  request: TestMatchRequestDetails,
  callback?: function,
)

检查扩展程序的任何 declarativeNetRequest 规则是否与假设请求匹配。注意:此方法仅适用于未打包的扩展程序,因为它仅适用于扩展程序开发期间。

参数

返回

  • 清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。

updateDynamicRules()

prometido
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()

prometido
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()

Promise Chrome 90 及更高版本
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()

Promise Chrome 111 及更高版本
chrome.declarativeNetRequest.updateStaticRules(
  options: UpdateStaticRulesOptions,
  callback?: function,
)

Ruleset 中停用和启用各个静态规则。对已停用的 Ruleset 所属规则所做的更改将在其下次启用时生效。

参数

返回

  • Promise<void>

    清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。

事件

onRuleMatchedDebug

chrome.declarativeNetRequest.onRuleMatchedDebug.addListener(
  callback: function,
)

当规则与请求匹配时触发。仅适用于具有 "declarativeNetRequestFeedback" 权限的已解压缩扩展程序,因为此命令仅用于调试目的。

参数