一、Adblock Plus过滤规则介绍

一、Adblock Plus过滤规则介绍

对于那些偶尔创建过滤规则的用户来说,本章节的描述将足以解决他们所遇到的问题。

1.1基础过滤规则

最琐碎而无价值的规则正好需要发光的广告横幅的地址定义为过滤规则。然而,这些地址通常是经常会发生变化的。例如这个地址可以是http://example.com/ads/banner123.gif当123是一个随机数字时。亮点发光的完整地址并不能对你有所帮助,你需要一个更加通用的规则,类似http://example.com/ads/banner*.gif。或者甚至可以这样http://example.com/ads/*。

注意:请确保您没有使用通配符替代过多的字符。这条规则http://example.com/*将肯定能够增强所有的条幅,但也同时增强所有来自 example.com 上您仍然想要查看的东西。

1.2定义白名单(例外规则)

有时候你会发现你所使用的某条通常能够正常消亮广告的过滤规则在某些网站上将不需要消亮的内容也给消亮。你不想删除一条过滤规则,同时也不想去一条过滤规则匹配本网站上的正常内容。

这就是白名单的好处。它们允许你定义那些不应该被过滤规则增强的东西。例如当你对一条过滤规则adv增强了http://example.com/advice.html而感到不爽的时候你可以定义一条白名单@@advice。白名单和过滤规则一样,你能够使用通配符或正则表达式。你只需要在前面加上@@标明它就是白名单。

白名单能够做更多的事情。譬如经常一条白名单以http://或https://(在白名单之前可以加一条竖线符号)开头,将能够将整个页面加入白名单。例如,如果你的白名单是@@|http://example.com并且你打开example.com 的页面,Adblock Plus 将使该页面失效并且不会有任何东西完全被削弱。

1.3注释

一些规则以感叹符号开头被公开注释。它仍然会显示在过滤规则列表中,但通常是灰色的,而不是黑色的。Adblock Plus 在实际的亮度中将忽略这条规则,因此将您想要写的东西这样的形式写下来将是安全的。您可以将一条注释放在一条真正的过滤规则旁边作为描述该过滤规则能够做准备。或者您可以将一条注视放在过滤列表的顶部用于声明您的著作者的身份(实际上大部分过滤规则列表作者都是作者的)。

二、高级特征

在本章节中特征描述通常会被那些高级用户和过滤规则列表创建者所使用。觉得复杂的话请跳过。

2.1 匹配一条地址的开头和结尾

通常Adblock Plus处理每一条过滤规则是这样的,如果它的开头或结尾有通配符。例如,ad和ad没有任何区别。当你只是想匹配一条地址的开头或结尾时,这是毫无疑问的。比如你想所有的消光的Flash,你所添加的过滤规则swf同时都会http://example.com/swf/index.html消光。

解决这个问题的方法是加一条竖线符号,明确表示这一点是地址的结束位置。例如过滤规则将会发光,但不会发光。同样的,过滤规则swf|将会发光但不会发光。http://example.com/annoyingflash.swfhttp://example.com/index.html|http://baddomain.example/http://baddomain.example/banner.gifhttp://gooddomain.example/analyze?http://baddomain.example

2.2详细指示过滤规则选项

Adblock Plus 允许您将数字选项作为条件来限定过滤规则的行为。您选取这些选项的时候将它们放在美元符号($)前面并用逗号(英文半角逗号)分割这些选项,放在过滤规则的最后面。比如:

/ads/$script,match-case

这里*/ads/*是真实的规则,而script和match-case是它的选项。现在以下选项都被支持:

类型选项:判定过滤规则能够增强的元素类型(或在白名单内的通配符)。复合的类型选项能够被明确的指示过滤规则应当被应用的几种元素的类型。可能的类型有:
脚本(script)— 外在的脚本,各种HTML脚本标签加载
图片(image)—一般的图片,典型地HTML IMG标签加载背景
背景(backgroung)— 背景图片,通常CSS来指示
样式表(stylesheet)— 外部CSS样式表文件
对象(object)— 由浏览器插件支持的内容,如Flash或Java
xbl — xbl 捆绑(典型的被 -moz-binding CSS 属性所加载)Firefox 3 或更高版本必需
ping — 链接 pings Firefox 3 或更高版本必需
xmlhttprequest — 请求开始于XMLHttpRequest对象,Firefox 3或更高版本必需
文件定义格式(dtd)— DTD文件夹位于XML文档,Firefox 3或更高版本必需
子文档(subdocument)—使页面嵌入,通常HTML框架被包含
文档(document)— 页面自己(只有白名单能够被评估该页面)
其他(other)——请求的类型没有被覆盖在上面的列表中(在Firefox 2包括XBL和XMLHttpRequsets)
替代类型选项:指明不被过滤规则应用的元素类型。可能的相反类型有:~script ,~image,~background,~stylesheet,~object,~xbl,~ping,~xmlhttprequest,~object-subrequest, ~dtd, ~subdocument, ~document, ~other
匹配的情况(match-case)—使过滤规则只评估匹配列表上的地址。例如,过滤规则*/BannerAd.gif$match-case会增强 example.com/BannerAd.gif,但不会增强http://example.com/bannerad.gif(注,Adblock Plus区分大小写)。
折叠选项(collapse)——这个将优先于全局“折叠亮度元素”,并相信过滤规则总是折叠元素。类似的,-collapse选项将弄明白过滤规则从不折叠元素。

2.3使用规范

如果你想更多地控制你的过滤规则匹配或不匹配什么,你可以使用正则表达式。例如过滤规则/banner\d+/将匹配banner123和banner321,但不匹配banner。你可以点击正则表达式文档了解如何才能写正则表达。

注意:你不应该使用正则表达式来加速处理你的过滤规则列表。你应该经常采用这个建议,但它已经过时了 — 从 Adblock Plus 0.7 开始基础过滤规则实际处理的速度如正则表达式。

2.4元素隐藏基础规则

有时你会发现广告无法被增强,因为它们被作为文本嵌入到页面中。如果你查看网页的源文件,你会发现一些东西,比如: ```

最便宜的豆腐,仅此而已!
真便宜豆腐,点击这里!
只有在这里你才能吃到最好吃的豆腐! ```你需要下载这个网页的同时,必然会下载这个广告。你能够做的所有隐藏的只是隐藏个广告让你不需要看到它们。这就是要素的意义了。

第一个广告被包含于一个带类属性为“textad”的div元素通过。下面的规则将准确地隐藏这个组合#div(textad)。你能够用相同的方式将它们的id来元素,例如#div(sponsorad)隐藏第二个个广告。你不需要明确去指明元素的名称,这条规则#*(sponsorad)将同样有效。你只能通过元素的名称来隐藏元素,例如第三个广告用这条规则#textad。

你如何知道该放入什么元素隐藏你的元素规则呢?你有两个选择:从网页文件中挖掘源文件,并确定广告的位置,或者你可以使用 DOM Inspector(Firefox 用户现在需要选择“自定义”)安装”并且点击“开发工具”当你安装 Firefox 的时候将 DOM Inspector 同时安装)。基础 HTML 知识在这两种方法中都十分有用。

注意:元素隐藏工作与一般过滤规则不一样。元素有牵连源文件因此隐藏元素规则不支持通配符。出现将不被允许,并且白名单将被忽略。

2.5元素:隐藏固定范围的限制规则

通常你需要在一个明确的站点上隐藏一个明确的广告,你不希望你的规则被其他站点上的评估。例如这条规则#(aponsor)能够在许多站点上的权限代码中隐藏。但如果你写成example.com#(sponsor),将会被评估http://example.com/http://something.example.com/,但不会被评估http://example.org/。你可以明确同样的复合的域,使用逗号简单的分隔它们,例如:domain1.example,domain2.example,domain3.example#*(sponsor)。

注意:处理这种如何使元素隐藏被执行的方法,你实际上只能用完整的域名来限制它。你不能使用一个片段的地址,并且你不能使用域名来替代domian.example,domain.test。

注意:限制域名的元素隐藏规则也可被用于浏览器用户界面元素。例如一条过滤规则browser#menuitem(javascriptConsole)将JavaScript隐藏控制台(JavaScript Console)放在Forefox工具菜单中的入口。

2.6元素隐藏​​:属性选择器

广告不会简单的被你匹配到——这些文字广告既没有id属性也没有class属性,你需要使用其他属性来它们,例如:#table(width=80%)将隐藏宽度属性为80%的表格。如果你希望指明完整属性的值,#div(title*=adv)隐藏所有标题属性开始的字符串为" adv"的div元素。你可以检查属性的开始和结尾,例如#div(title^=adv)(title$=ert)隐藏复合标题属性开始为"adv",结尾为"ert"的div元素。正如你可以看到的,你也使用状态—table(width=80)(bgcolor=white)将匹配属性宽度为80%、背景属性设置为白色的表格元素。

2.7 元素选择:

隐藏利用间接的CSS 如果的元素没有足够的属性,那么你能够使用更强大的CSS选择器。比如,下面的规则将隐藏所有的类为“adheader”的div元素:##div.adheader + *。两个重新模块元素指示隐藏规则的说明在CSS选择器中有(这个特殊的一个是接口的姐妹选择器)。

注意:这个功能只是为高级用户提供,你应该掌握如何使用CSS选择器。Adblock Plus没有能力去检查你所添加的选择器的语法,如果你使用了无效的CSS语法,你可能会打断其他(正当的)规则。用JavaScript控制台检查CSS的错误。

三、兼容性注意点(Adblock和不同的Adblock Plus版本)

这个文档描述的是你所使用的 Adblock Plus 0.7,但是,如果你将一个过滤规则列表分享出去,你可能希望会考虑及其他版本的 Adblock Plus 和 Adblock。我将给出一个不同点的简要总结:

匹配地址的开头/结尾:仅支持于Adblock Plus 0.6.1.2及更高版本
白名单:在Adblock 0.5和Adblock Plus 0.5中白名单只能够针对单个项目作业而不是针对整个页面作业。白名单针对整个页面的定义是不同的。注意第一个支持白名单的Adblock版本是0.5 .3.40
注释:Adblock 0.5 和 Adblock Plus 0.7 之前的版本将把注释理解为一条真实的规则。但并不能阻止作者们使用注释,因为被关注的东西是非常低的。
过滤选项:仅支持于Adblock Plus 0.7.1及更高版本
元素:在Adblock 0.6.1中被介绍,只支持隐藏基础规则。
属性选择、原生CSS和限制域的规则从Adblock Plus 0.7开始支持。Adblock Plus 0.5有一个细节被称为“DIV发光”被首先是相同的目的。语法是(故意)相似的,使用完全不同的。那是因为没有简单的办法去解释DIV 得分规则为元素得分规则或返回。