declarativeNetRequest.RuleCondition

确定规则是否匹配请求的条件详情,作为 declarativeNetRequest.Rulecondition 属性。

类型

此类型的值是对象。它们包含以下属性:

domainType 可选

一个 string。指定网络请求是第一方还是第三方。如果请求与发起请求的文档或子文档属于同一域,则该请求被视为第一方。否则,它被视为第三方。如果省略,则接受所有请求。可能的值为 "firstParty""thirdParty"

domains 已弃用 可选

一个 string 数组。请使用 initiatorDomains 代替。该规则仅匹配源自此域名列表的网络请求。

excludedDomains 已弃用 可选

一个 string 数组。请使用 excludedInitiatorDomains 代替。该规则不匹配源自此域名列表的网络请求。

initiatorDomains 可选

一个 string 数组。该规则仅匹配源自此域名列表的网络请求。如果省略列表,则该规则应用于来自所有域的请求。不允许空列表。应使用 规范域名。此匹配基于请求发起者,而非请求 URL。

excludedInitiatorDomains 可选

一个 string 数组。该规则不匹配源自此域名列表的网络请求。如果列表为空或被省略,则不排除任何域名。此选项优先于 initiatorDomains。应使用 规范域名。此匹配基于请求发起者,而非请求 URL。

isUrlFilterCaseSensitive 可选

一个 boolean。指定 urlFilterregexFilter(任一指定)是否区分大小写。虽然在 WECG issue 269 中,跨浏览器默认值 false 已经达成共识,但 Chrome 和 Safari(较旧)版本曾使用 true。详情请参见 浏览器兼容性

regexFilter 可选

一个 string。用于匹配网络请求 URL 的正则表达式。请注意:

requestDomains 可选

一个 string 数组。当域名匹配此列表中的某个域名时,规则才匹配网络请求。如果省略列表,则该规则应用于来自所有域的请求。不允许空列表。应使用 规范域名

excludedRequestDomains 可选

一个 string 数组。当域名匹配此列表中的某个域名时,规则不匹配网络请求。如果列表为空或被省略,则不排除任何域名。此选项优先于 requestDomains。应使用 规范域名

requestMethods 可选

一个 string 数组。规则匹配的 HTTP 请求方法列表。不允许空列表。指定 requestMethods 规则条件也会排除非 HTTP(s) 请求,而指定 excludedRequestMethods 则不会。

excludedRequestMethods 可选

一个 string 数组。规则不匹配的请求方法列表。只能指定 requestMethodsexcludedRequestMethods 中的一个。如果两者均未指定,则匹配所有请求方法。

resourceTypes 可选

一个 declarativeNetRequest.ResourceType 数组。规则匹配的资源类型列表。不允许空列表。"allowAllRequests" 规则必须指定此项,并且只能包含 "sub_frame""main_frame" 资源类型。

excludedResourceTypes 可选

一个 declarativeNetRequest.ResourceType 数组。规则不匹配的资源类型列表。只能指定 resourceTypesexcludedResourceTypes 中的一个。如果两者均未指定,则阻止所有资源类型(除了 "main_frame")。

responseHeaders 可选

一个 declarativeNetRequest.HeaderInfo 数组。如果请求与此列表中的任何响应头条件匹配(如果指定),则规则匹配。

excludedResponseHeaders 可选

一个 declarativeNetRequest.HeaderInfo 数组。如果请求与此列表中的任何响应头条件匹配(如果指定),则规则不匹配。如果同时指定了 excludedResponseHeadersresponseHeaders,则 excludedResponseHeaders 属性具有优先权。

tabIds 可选

一个 number 数组。规则应匹配的 tabs.Tab id 列表。ID 为 tabs.TAB_ID_NONE 的请求不源自标签页。不允许空列表。仅支持会话范围的规则。

excludedTabIds 可选

一个 number 数组。规则不应匹配的 tabs.Tab id 列表。ID 为 tabs.TAB_ID_NONE 的请求不源自标签页。仅支持会话范围的规则。

urlFilter 可选

一个 string。与网络请求 URL 匹配的模式。支持的构造:

  • *:通配符:匹配任意数量的字符。
  • |:左或右锚点:如果用于模式的任一端,则分别指定 URL 的开头或结尾。
  • ||:域名锚点:如果用于模式的开头,则指定 URL 的(子)域名的开头。
  • ^:分隔符:匹配除字母、数字或 _-.% 之外的任何字符。最后一个 ^ 也可能匹配 URL 的末尾而不是分隔符。

urlFilter 由以下部分组成:(可选的左/域名锚点)+ 模式 +(可选的右锚点)。如果省略,则匹配所有 URL。不允许空字符串。不允许以 ||* 开头的模式。请改用 *。请注意:

  • 只能指定 urlFilterregexFilter 中的一个。
  • urlFilter 必须仅由 ASCII 字符组成。此内容将与 URL 进行匹配,其中主机名以 punycode 格式编码(对于国际化域名),其他非 ASCII 字符则以 UTF-8 进行百分比编码。例如,当请求 URL 为 http://abc.рф?q=ф 时,urlFilter 将与 URL http://abc.xn--p1ai/?q=%D1%84 匹配。

规范域名

initiatorDomainsexcludedInitiatorDomainsrequestDomainsexcludedRequestDomains 中指定的域名应符合以下要求:

  • 允许子域名,例如“a.example.com”。
  • 条目必须仅包含*小写* ASCII 字符。
  • 对于国际化域名,请使用 Punycode 编码。
  • IPv4 地址必须表示为由点分隔的 4 个数字。
  • IPv6 地址应表示为其规范形式,并用方括号括起来。

要以编程方式生成 URL 的规范域名,请使用 URL API 并读取其 hostname 属性,即 new URL(url).hostname

扩展程序示例

浏览器兼容性