-
Notifications
You must be signed in to change notification settings - Fork 1
广告屏蔽规则综述
- ABP1: Adblock Plus filters explained
-
Adblock Plus Help Center
- ABP2: How to write filters
- ABP3: Snippet Filters Tutorial
[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
如果有其他广告屏蔽器的文档没有收录,欢迎反馈。 但是,如果你正在使用的广告过滤器没有关于广告屏蔽规则的文档,你可能最好先考虑换一个广告屏蔽器。 文档意味着对广告屏蔽器的行为和规则支持等等关键细节的描述。 大部分情况下,规则撰写者只是参考这些描述来编写规则,而不是通过浏览广告屏蔽器的源代码等等。 所以,对于规则编写者而言,哪怕是 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
大坑啊。
目前,规则选项可分为类型过滤选项和排除选项。
类型过滤选项是用于双向过滤不同类型的资源的规则选项。
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
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 中,其被直接称之为分隔符。
##
#@#
#?#
#$#
又一个大坑。