例外规则的功能主要就是用来纠正普通的拦截规则造成的误杀,比如我们写了一条通用规则可以拦截大部分情况下的广告。但是在个别情况下造成了对正常内容的误杀,这时候我们就可以添加一条例外规则避免对正常内容的误杀。
URL拦截例外规则
“@@”作为URL拦截例外规则的标识,后面紧跟普通的URL拦截规则
举个例子,比如我们写了下面一条URL拦截规则
/path/of/ad* |
这时候下面类似下面这些资源URL会被命中
https://www.example.com/path/of/ad/banner.js |
但是最后一条资源URL是正常的资源内容,因为规则”/path/of/ad*” 被误杀,这时候我们就可以新增一条例外规则来避免正常的资源URL被误杀。
@@www.example.com/path/of/advanced/ |
这条例外规则就解决了资源上面提到的误杀问题,我们可以看到例外规则的写法很简单,就是以 “@@” 紧跟一条普通的URL规则,只不过这个URL规则不是用来匹配广告的,而是用来匹配一个被误杀的正常资源。
通常情况下,例外规则还会加入特定域名的约束,比如下面这条规则
@@/path/of/advanced@example.com |
这条例外规则只在当前二级域名为 “example.com”的站点才会生效。
@@/path/of/advanced$domain=example.com |
等价于上面一条列外规则,这是ABP规则的写法。
隐藏元素例外规则
“@#”作为隐藏元素例外规则的标识,后面紧跟普通的隐藏元素规则
隐藏元素的例外规则是针对全局规则的,举例说明,比如下面这条全局的隐藏元素规则。
##div[title*="ad"] |
网站 www.example.com 中存在下面个页面元素会被误杀
<div tilte="advanced"> |
这时候我们只要添加下面这条例外规则就可以避免被误杀
@#div[title*="ad"]@example.com |
等价的ABP语法如下
example.com#@#div[title*="ad"] |