Skip to content

广告屏蔽规则综述

Crystal-RainSlide edited this page Jul 20, 2020 · 6 revisions

官方文档

      [uBlock Wiki][uBO Wiki]         | [uBlock Wiki 简体中文翻译][uBO Wiki zh-CN]

---------------------------------------- | ------------------------------------------ uBO1: Static filter syntax | 静态过滤规则语法 uBO2: Procedural cosmetic filters | 过程式修饰规则 uBO3: Resources Library | 资源库

NAB: NanoAdblocker/NanoDoc/Index.MD

AdGuard Knowledgebase

别的广告屏蔽器的文档呢?

如果有其他广告屏蔽器的文档没有收录,欢迎反馈。 但是,如果你正在使用的广告过滤器没有关于广告屏蔽规则的文档,你可能最好先考虑换一个广告屏蔽器。 文档意味着对广告屏蔽器的行为和规则支持等等关键细节的描述。 大部分情况下,规则撰写者只是参考这些描述来编写规则,而不是通过浏览广告屏蔽器的源代码等等。 所以,对于规则编写者而言,哪怕是 WebKit Content Blocker,都比看似更强一些的 AdBlock 更加理想。 一定程度上,这不是有和没有的区别,而是是有救和没救的区别。


注释

引用: ABP1#comments | ABP2#comments

以英文感叹号 ! 字符开头的行都会被作为注释。 可将 ! 作为注释起始符。

备注:一些广告屏蔽器支持在注释起始符甚至任意规则之前添加空白字符, 但这一行为尚未被包括在任何官方文档之内。所以,哪怕是需要缩进,也不建议这么做。

示例:

! 什么时候才有(受广泛支持的)多行注释呢
!     感叹号之后,倒是好随便缩进
!!!!! 还可以用感叹号缩进

网络请求过滤规则

引用: ABP1 | ABP2#basic

按从前到后的顺序,一条网络请求过滤规则由一个可选的排除标记、 一条必要的链接匹配规则和可选的规则选项组成。 三个部分之间不存在特定的分隔符,但是,排除标记是一个固定符号, 规则选项也拥有必要的起始符,可以起到分辨和分隔各个部分的作用。

形式化语法

[排除标记]链接匹配规则[规则选项]

或者

[@@]链接匹配规则[$规则选项]

示例

||mp.weixin.qq.com/mp/*report?$image,xmlhttprequest
@@|https://example.com/js/non-script-can-be-allowed-under-https/*$~script

链接匹配规则

链接匹配规则分为普通链接匹配规则正则表达式匹配规则两种。

普通链接匹配规则
由链接匹配符与任何可不经转码、直接出现在链接之中的字符组成。 现实使用中,这种链接匹配规则通常是从匹配目标链接地址修改而来的。 - **如果开头和结尾都是 `/` 字符,就会被作为正则表达式匹配规则处理**; - 如果未以通配符、起止符或域名起始符开头,解析时就会往开头加上一个通配符; - 如果未以通配符或者起止符结尾,解析时就会往结尾加上一个通配符。
正则表达式匹配规则
由一条正则表达式与表达式前后的 `/` 起止符构成。 实际上应当与 JavaScript 正则表达式字面量无异。 但是由于每次网络请求时都将执行一遍所有正则表达式规则,编写时也必须考虑到性能。

如果普通链接匹配规则首尾正好都是 / 字符, 可以在前后手动加上通配符 *, 就不会被当成正则表达式匹配规则了。

链接匹配符

符号 名称 说明
* 通配符 匹配任意字符
^ 隔断符 匹配链接结尾处(类似正则表达式中的 $)和除了数字、字母、_-.% 以外的任意字符
| 起止符 匹配链接开始处(类似正则表达式中的 ^)或链接结尾处(类似正则表达式中的 ^
只能位于链接匹配规则的开始处或结尾处。
|| 域名起始符 匹配任意 HTTP 协议前缀与任何后级域名。
只能位于链接匹配规则的开始处。可将其作为起止符的变种。

排除标记

网络请求过滤规则的排除标记固定为 @@

规则选项

引用: ABP1#options ABP1#filter-options ABP2#options uBO1

大坑啊。

目前,规则选项可分为类型过滤选项排除选项

AdBlock Plus 支持的规则选项

类型过滤选项

类型过滤选项是用于双向过滤不同类型的资源的规则选项。

script image stylesheet object xmlhttprequest subdocument ping websocket webrtc font media popup other

排除选项

排除选项是一组专用于排除规则的规则选项。 不带排除选项的排除规则只能排除相应的网络请求过滤规则。 加上排除选项以后,排除规则的作用可以改为针对页面排除、排除#网页元素修饰规则等等。

document elemhide generichide genericblock

match-case

domain third-party

sitekey csp rewrite

uBlock Origin 支持的规则选项

1p 3p all badfilter css cname ehide empty first-party frame ghide important inline-script inline-font mp4 popunder redirect

redirect-rule specifichide shide xhr

元素修饰规则

元素修饰规则,针对页面中的元素进行隐藏处理,也容纳一些例如脚本规则等特殊规则。 目前,一般通过向网页附加优先级极高的特殊[层叠样式表][CSS1]([CSS][CSS2])

按从前到后的顺序,一条元素修饰规则由可选的目标域名、必要的类型标识符和必要的选择器组成。 类型标识符同时被作为域名和选择器之间的分隔符。

示例

example.com##body > div > p > a[href="https://www.iana.org/domains/example"]
example.com,~about.example.com#@#div > p > a

类型标识符

类型标识符标定元素修饰规则 ABP1#elementhiding 中,其被直接称之为分隔符。

## #@# #?# #$#

目标域名

选择器

又一个大坑。

 

Clone this wiki locally