chrome.declarativeWebRequest

说明

注意:此 API 已弃用。请改用 declarativeNetRequest API。使用 chrome.declarativeWebRequest API 拦截、阻止或修改正在处理的请求。它比 chrome.webRequest API 快得多,因为您可以注册在浏览器中(而不是在 JavaScript 引擎中)评估的规则,从而减少往返延迟时间并提高效率。

权限

declarativeWebRequest

您必须在扩展程序清单中声明“declarativeWebRequest”权限,才能使用此 API,同时还要声明主机权限

{
  "name": "My extension",
  ...
  "permissions": [
    "declarativeWebRequest",
    "*://*/*"
  ],
  ...
}

可用性

Beta 渠道 ≤ MV2

清单

请注意,某些类型的非敏感操作不需要主机权限:

  • CancelRequest
  • IgnoreRules
  • RedirectToEmptyDocument
  • RedirectToTransparentImage

SendMessageToExtension() 操作需要对您希望触发消息的任何主机拥有主机权限。

所有其他操作都需要对所有网址具有主机权限。

举例来说,如果 "https://*.google.com/*" 是扩展程序拥有的唯一主机权限,那么此类扩展程序可以设置规则来:

  • 取消向 https://www.google.comhttps://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 才会匹配网络请求。当用户在多功能框中输入 https://www.example.com 时,以下 RequestMatcher 会与网络请求匹配:

var matcher = new chrome.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'example.com', schemes: ['http'] },
  resourceType: ['main_frame']
});

由于方案,对 https://www.example.com 的请求会被 RequestMatcher 拒绝。 此外,由于存在 resourceType,所有针对嵌入式 iframe 的请求都会被拒绝。

如需取消对“example.com”的所有请求,您可以按如下方式定义规则:

var rule = {
  conditions: [
    new chrome.declarativeWebRequest.RequestMatcher({
      url: { hostSuffix: 'example.com' } })
  ],
  actions: [
    new chrome.declarativeWebRequest.CancelRequest()
  ]
};

如需取消对 example.comfoobar.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]);

条件和操作的评估

声明性 Web 请求 API 遵循 Web Request APIWeb 请求生命周期模型。这意味着,只能在 Web 请求的特定阶段测试条件,同样,也只能在特定阶段执行操作。下表列出了与条件和操作兼容的请求阶段。

可以处理条件属性的请求阶段。
“Condition”属性 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 操作不会在各个请求阶段之间保留。在 Web 请求的每个阶段,系统都会评估所有规则的所有条件。如果执行 IgnoreRules 操作,则该操作仅适用于在同一阶段中针对同一 Web 请求执行的其他操作。

类型

AddRequestCookie

向请求添加 Cookie 或替换 Cookie(如果已存在同名 Cookie)。请注意,最好使用 Cookies API,因为这样计算开销更低。

属性

AddResponseCookie

向响应添加 Cookie 或替换 Cookie(如果已存在同名 Cookie)。请注意,最好使用 Cookies API,因为这样计算开销更低。

属性

AddResponseHeader

将响应标头添加到相应 Web 请求的响应中。由于多个响应标头可能具有相同的名称,因此您需要先移除一个响应标头,然后再添加一个新的响应标头,才能替换该标头。

属性

CancelRequest

用于取消网络请求的声明式事件操作。

属性

EditRequestCookie

修改请求的一个或多个 Cookie。请注意,最好使用 Cookies API,因为这样计算开销更低。

属性

EditResponseCookie

修改响应的一个或多个 Cookie。请注意,最好使用 Cookies API,因为这样计算开销更低。

属性

FilterResponseCookie

HTTP 响应中 Cookie 的过滤条件。

属性

  • ageLowerBound

    number 可选

    Cookie 生命周期(以当前时间之后的秒数表示)的下限(含)。只有将失效日期时间设置为“now + ageLowerBound”或更晚时间的 Cookie 才能满足此条件。会话 Cookie 不符合此过滤条件的标准。Cookie 生命周期根据“max-age”或“expires”Cookie 属性计算得出。如果同时指定了这两个属性,系统会使用“max-age”来计算 Cookie 的有效期。

  • ageUpperBound

    number 可选

    Cookie 生命周期的上限(含边界值,以当前时间之后的秒数表示)。只有过期日期时间位于 [now, now + ageUpperBound] 区间内的 Cookie 才符合此条件。会话 Cookie 和过期日期时间为过去的 Cookie 不符合此过滤条件的标准。Cookie 生命周期根据“max-age”或“expires”Cookie 属性计算得出。如果同时指定了这两个属性,系统会使用“max-age”来计算 Cookie 的有效期。

  • 域名

    字符串 可选

    Domain cookie 属性的值。

  • expires

    字符串 可选

    Expires cookie 属性的值。

  • httpOnly

    字符串 可选

    HttpOnly cookie 属性是否存在。

  • maxAge

    number 可选

    Max-Age cookie 属性的值

  • name

    字符串 可选

    Cookie 的名称。

  • 路径

    字符串 可选

    Path cookie 属性的值。

  • 安全

    字符串 可选

    是否存在 Secure Cookie 属性。

  • sessionCookie

    布尔值 (可选)

    过滤会话 Cookie。会话 Cookie 未在任何“max-age”或“expires”属性中指定生命周期。

  • 字符串 可选

    Cookie 的值,可能用英文双引号填充。

HeaderFilter

按各种条件过滤请求标头。多个条件会作为合取进行评估。

属性

  • nameContains

    字符串 | 字符串数组 可选

    如果标头名称包含所有指定的字符串,则匹配。

  • nameEquals

    字符串 可选

    如果标头名称等于指定字符串,则匹配。

  • 名称前缀

    字符串 可选

    如果标头名称以指定字符串开头,则匹配。

  • nameSuffix

    字符串 可选

    如果标头名称以指定字符串结尾,则匹配。

  • valueContains

    字符串 | 字符串数组 可选

    如果标头值包含所有指定的字符串,则匹配。

  • valueEquals

    字符串 可选

    如果标头值等于指定字符串,则匹配。

  • valuePrefix

    字符串 可选

    如果标头值以指定字符串开头,则匹配。

  • valueSuffix

    字符串 可选

    如果标头值以指定字符串结尾,则匹配。

IgnoreRules

屏蔽符合指定条件的所有规则。

属性

  • 构造函数

    void

    constructor 函数如下所示:

    (arg: IgnoreRules) => {...}

  • hasTag

    字符串 可选

    如果设置,系统会忽略具有指定标记的规则。此忽略操作不会持久存在,只会影响同一网络请求阶段的规则及其操作。请注意,规则按优先级降序执行。此操作会影响优先级低于当前规则的规则。具有相同优先级的规则可能会被忽略,也可能不会被忽略。

  • lowerPriorityThan

    number 可选

    如果设置了此属性,则系统会忽略优先级低于指定值的规则。此边界不会持久存在,仅影响同一网络请求阶段的规则及其操作。

RedirectByRegEx

通过对网址应用正则表达式来重定向请求。正则表达式使用 RE2 语法

属性

  • 构造函数

    void

    constructor 函数如下所示:

    (arg: RedirectByRegEx) => {...}

  • 来自

    字符串

    可能包含捕获组的匹配模式。为了更贴近 JavaScript 正则表达式,捕获组采用 Perl 语法 ($1、$2 等) 而非 RE2 语法 (\1、\2 等) 进行引用。

  • 字符串

    目标模式。

RedirectRequest

用于重定向网络请求的声明性事件操作。

属性

RedirectToEmptyDocument

将网络请求重定向到空文档的声明性事件操作。

属性

RedirectToTransparentImage

将网络请求重定向到透明图片的声明性事件操作。

属性

RemoveRequestCookie

移除请求的一个或多个 Cookie。请注意,最好使用 Cookies API,因为这样计算开销更低。

属性

RemoveRequestHeader

移除具有指定名称的请求标头。请勿在同一请求中将 SetRequestHeader 和 RemoveRequestHeader 与同一标头名称搭配使用。每个请求标头名称在每个请求中仅出现一次。

属性

RemoveResponseCookie

移除响应的一个或多个 Cookie。请注意,最好使用 Cookies API,因为这样计算开销更低。

属性

RemoveResponseHeader

移除具有指定名称和值的所有响应标头。

属性

RequestCookie

HTTP 请求中 Cookie 的过滤条件或规范。

属性

  • name

    字符串 可选

    Cookie 的名称。

  • 字符串 可选

    Cookie 的值,可能用英文双引号填充。

RequestMatcher

根据各种条件匹配网络事件。

属性

  • 构造函数

    void

    constructor 函数如下所示:

    (arg: RequestMatcher) => {...}

  • contentType

    string[] 可选

    如果响应(来自 HTTP Content-Type 标头)的 MIME 媒体类型包含在列表中,则匹配。

  • excludeContentType

    string[] 可选

    如果响应(来自 HTTP Content-Type 标头)的 MIME 媒体类型包含在列表中,则匹配。

  • excludeRequestHeaders

    HeaderFilter[] 可选HeaderFilter

    如果没有任何请求标头与任何 HeaderFilter 相匹配,则匹配。

  • excludeResponseHeaders

    HeaderFilter[] 可选HeaderFilter

    如果没有任何响应标头与任何 HeaderFilter 相匹配,则匹配。

  • firstPartyForCookiesUrl

    UrlFilter(可选)

    已弃用

    自版本 82 发布以来一直被忽略。

    如果请求的“第一方”网址满足 UrlFilter 的条件,则匹配。请求的“第一方”网址(如果存在)可以与请求的目标网址不同,并且描述了在进行第三方 Cookie 检查时,哪些内容被视为“第一方”。

  • requestHeaders

    HeaderFilter[] 可选HeaderFilter

    如果某个请求标头与某个 HeaderFilter 匹配,则匹配。

  • resourceType

    ResourceType[] 可选

    如果请求的请求类型包含在列表中,则匹配。无法与任何类型匹配的请求会被过滤掉。

  • responseHeaders

    HeaderFilter[] 可选HeaderFilter

    如果某个响应标头与某个 HeaderFilter 相匹配,则匹配成功。

  • 阶段

    阶段 [] 可选

    包含描述阶段的字符串列表。允许的值包括“onBeforeRequest”“onBeforeSendHeaders”“onHeadersReceived”“onAuthRequired”。如果存在此属性,则会将适用的阶段限制为所列出的阶段。请注意,整个条件仅适用于与所有属性兼容的阶段。

  • thirdPartyForCookies

    布尔值 (可选)

    已弃用

    自版本 87 起被忽略。

    如果设置为 true,则匹配受第三方 Cookie 政策约束的请求。如果设置为 false,则匹配所有其他请求。

  • 网址

    UrlFilter(可选)

    如果请求的网址满足 UrlFilter 的条件,则匹配。

ResponseCookie

HTTP 响应中 Cookie 的规范。

属性

  • 域名

    字符串 可选

    Domain cookie 属性的值。

  • expires

    字符串 可选

    Expires cookie 属性的值。

  • httpOnly

    字符串 可选

    HttpOnly cookie 属性是否存在。

  • maxAge

    number 可选

    Max-Age cookie 属性的值

  • name

    字符串 可选

    Cookie 的名称。

  • 路径

    字符串 可选

    Path cookie 属性的值。

  • 安全

    字符串 可选

    是否存在 Secure Cookie 属性。

  • 字符串 可选

    Cookie 的值,可能用英文双引号填充。

SendMessageToExtension

触发 declarativeWebRequest.onMessage 事件。

属性

SetRequestHeader

将指定名称的请求标头设置为指定值。如果之前不存在具有指定名称的标头,则会创建一个新标头。标头名称比较始终不区分大小写。每个请求标头名称在每个请求中仅出现一次。

属性

Stage

枚举

"onBeforeRequest"

"onBeforeSendHeaders"

"onHeadersReceived"

"onAuthRequired"

事件

onMessage

chrome.declarativeWebRequest.onMessage.addListener(
  callback: function,
)

当通过声明性 Web 请求 API 的操作从 declarativeWebRequest.SendMessageToExtension 发送消息时触发。

参数

  • callback

    函数

    callback 参数如下所示:

    (details: object) => void

    • 详细信息

      对象

      • documentId

        字符串 可选

        发出请求的文档的 UUID。

      • 相应文档所处的生命周期。

      • frameId

        数值

        值 0 表示请求发生在主框架中;正值表示请求发生的子框架的 ID。如果加载了(子)框架的文档(typemain_framesub_frame),则 frameId 表示相应框架的 ID,而不是外部框架的 ID。框架 ID 在标签页中是唯一的。

      • 发生导航的框架的类型。

      • 私信

        字符串

        调用脚本发送的消息。

      • 方法

        字符串

        标准 HTTP 方法。

      • parentDocumentId

        字符串 可选

        拥有相应框架的父级文档的 UUID。如果没有父级,则不设置此属性。

      • parentFrameId

        数值

        封装了发送请求的帧的帧的 ID。如果没有父框架,则设置为 -1。

      • requestId

        字符串

        请求的 ID。请求 ID 在浏览器会话中是唯一的。因此,它们可用于关联同一请求的不同事件。

      • 阶段

        触发相应事件时网络请求所处的阶段。

      • tabId

        数值

        发出请求的标签页的 ID。如果请求与标签页无关,则设置为 -1。

      • timeStamp

        数值

        触发相应信号的时间,以自纪元以来的毫秒数表示。

      • 所请求资源的使用方式。

      • 网址

        字符串

onRequest

提供由 addRulesremoveRulesgetRules 组成的声明性事件 API