茂名珍珠棉厂家:如何撰写Adblock Plus的过滤规则

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 23:29:33
如何撰写Adblock Plus的过滤规则

原文地址,由于本人水平有限,只是翻译了大致的意思,无法做到信达雅。有英文阅读能力的朋友还是推荐阅读原文。

 

  • 撰写Adblock Plus 过滤规则
  • AdBlock Plus 过滤规则介绍
    • 基本过滤规则
    • 定义例外规则
    • 匹配网址开头/结尾
    • 标记分隔符
    • 注释
  • 进阶功能
    • 指定过滤规则选项
    • 使用正则表达式
  • 元素隐藏
    • 基本规则
    • 隐藏元素:限定在特定域名的规则
    • 属性选择符
    • 高级选择符
    • 简单元素隐藏语法

撰写Adblock Plus 过滤规则

当前的Adblock Plus版本允许你通过许多不同的方法来优化过滤规则。本文档就是告诉你如何做。

声明:这里给出的所有的过滤规则只是例子而已,并不能直接使用。

AdBlock Plus 过滤规则介绍

对于偶尔才写过滤规则的用户,本章节对过滤规则的描述足矣。

基本过滤规则

通常你定义得最琐碎的过滤规则当然是阻挡banner地址的。但是这些地址在你每次打开页面的时候都会改变。例如:可能是http://example.com/ads/banner123.gif。其中的123就是个随机的数字。所以阻挡完整的图片网址没有效果,通常你需要更通用的过滤规则,例如http://example.com/ads/banner*.gif 甚至 http://example.com/ads/*

注意 :不要过多地使用通配符。过滤规则:http://example.com/* 虽然可以阻挡所有的banner,但也会阻挡example.com下其他一些你想看的内容。

定义例外规则

有时你可能会发现某个过滤规则平时挡广告挡得很好,但在某些情况下,会阻挡不该挡的内容。你不想移除这条过滤规则,但也不希望它阻挡不该挡的内容。

这就是例外规则的好处——它们允许你定义过滤规则不被使用的情况。例如:当你对adv规则阻挡了 http://example.com/advice.html不爽的时候,这时你就可以定义一条例外规则@@advice。例外规则的写法与过滤规则完全一样,你可以使用通配符和正则表达式。你只需要通过@@表明一个例外的规则。

例外规则可以处理得更多。如果一条例外规则以http://https://(在前面加上管线符号(|))开始,这会使所有的页面都是例外。例如:如果你的规则是@@|http://example.com,你浏览http: //example.com的页面时,Adblock Plus对这个页面将会失效,这将不会阻挡任何东西。

匹配网址开头/结尾

通常Adblock Plus处理过滤规则时,会自己假设在过滤规则的开头与结尾都有一个通配符,也就是说,ad*ad*效果是一样的。通常这并不会带来问题,但有时你可能想要设定可以匹配以网址开头或结尾的过滤规则。例如:你想要阻挡所有的Flash,如果你加入一条规则swf,阻挡的将不只是以swf结尾的地址, http://www.example.com/swf/index.html同样也会被阻挡。

要解决这个问题的办法就是:使用管线符号(|)来代表网址的最前端或最末端。例如:过滤规则swf|会阻挡 http://example.com/annoyingflash.swf但不会阻挡http://example.com/swf/index.html。过滤规则|http://baddomain.example/会阻挡http://baddomain.example/banner.gif而不会阻挡http://gooddomain.example/analyze?http://baddomain.example

有时你想阻止http://example.com/banner.gifhttps://example.com/banner.gif以及 http://www.example.com/banner.gif 。这时只需把两个管线符号(||)放到过滤规则的域名前面。||example.com/banner.gif会阻挡上面的地址,而不会阻挡http://badexample.com/banner.gif或者http://gooddomain.example/analyze?http://example.com/banner.gif(需要 Adblock Plus 1.1 或更高版本).

标记分隔符

通常你需要接受过滤规则的任何分隔符。例如,你可能写这样的一个规则:阻挡http://example.com/http://example.com:8000/ 但是不阻挡http://example.com.ar/。这里的符号(^)用作一个分隔符。http://example.com^ (需要AdBlock Plus 1.1或更高版本).

分隔符可以是除了字母、数字或者– . %之外的任何字符。这个地址的结尾也是作为一个分隔符下面的例子中所有的分隔符以红色标记出(译注:由于Google code的wiki没有标记颜色的方法,这里无红色,请参照原文):http://example.com:8000/foo.bar?a=12&b=%D1%82%D0%B5%D1%81%D1%82。所以这个地址可以通过过滤规则^example.com^ 或者^%D1%82%D0%B5%D1%81%D1%82^或者^foo.bar^过滤

注释

任何以感叹号(!)开始的规则,都被视为注释。在过滤规则的列表中,仍然会显示这些规则,但会用灰色的字来显示,而不是黑色。Adblock Plus在判断规则时,会忽略这些注释,所以我们可以写下任何我们想写的东西。你可以在一条规则上面写下这条规则是做什么用的。也可以在过滤列表的上方写上作者信息(大多数过滤列表的作者已经这样做了)。

进阶功能

本章节描述的特性通常只有高级用户和维护过滤列表的作者才会看。一般使用者可以跳过。

指定过滤规则选项

Adblock Plus可以让你指定某些选项来改变某条规则的行为。你列举这些选项的时候将它们放在美元符号($)后面并用逗号(,)分割这些选项,放在过滤规则的最后面。例如:

*/ads/*$script,match-case

这里的*/ads/*是真实的过滤规则,scriptmatch-case是它指定的选项。以下是目前支持的选项:

  • 类型选项:判定过滤规则(或例外规则)过滤元素的类型。过滤规则可以明确指定多种元素类型可以指定的类型包括:
    1. script —— 外部脚本,由HTML script标签加载
    2. image —— 一般图片,通常由 HTML 的 img 标签所载入
    3. background ——背景图片,通常用CSS指定
    4. stylesheet —— 外部CSS 样式表
    5. object —— 由浏览器插件处理的内容,例如Flash或Java
    6. xbl —— xbl绑定(通常由 -moz-binding CSS属性加载)
    7. ping pings
    8. XMLHttpRequest XMLHttpRequest对象 开始的请求
    9. object-subrequest —— 插件的请求,比如Flash
    10. dtd —— 通过XML文档加载的DTD文件
    11. subdocument —— 内嵌的页面,通常通过HTML的框架方式内嵌
    12. document —— 网页本身(只有 例外规则 适用)
    13. elemhide —— 只适用于例外规则,和document类似,但是只在页面上禁用隐藏规则而不是全部规则(需要Adblock Plus 1.2 或更高版本)
    14. other —— 其他不在上面的类型的请求
  • 反转类型选项:指定过滤规则 不应用的元素类型。可以指定的类型选项: ~script, ~image, ~background, ~stylesheet, ~object, ~xbl, ~ping, ~xmlhttprequest, ~object-subrequest, ~dtd, ~subdocument, ~document, ~elemhide, ~other
  • third-party/first-party请求限制:如果指定third-party选项,则过滤规则只适用于来源与当前正在浏览的页面的不同的请求。类似地,~third-party适用于来源与当前浏览页面相同的请求。
  • 域名限制:domain= example.com指过滤规则只适用于了"example.com"下的页面。多个域名,可以用"|"分隔:过滤规则 domain=example.com|example.net将只适用于"example.com"或"example.net"的页面。如果一个域名是前面有"~",则该规则不适用于这个域名的页面。例如,domain=~example.com指过滤规则适用于除了example.com之外的任何域名的页面,但domain=example.com|~foo.example.com限制了过滤规则适用于"example.com"但是不包括"foo.example.com"。
  • match-case —— 使过滤规则只适用于匹配地址,例如规则*/BannerAd.gif$match-case将阻止http://example.com /BannerAd.gif但是不阻止http://example.com/bannerad.gif
  • collapse —— 这个选项将覆盖全局“折叠屏蔽元素”,并确过滤规则总是折叠元素。类似地,~collapse选项将确保过滤规则不折叠元素

使用正则表达式

如果你想更好地控制您的过滤规则,什么匹配,什么不匹配,你可以使用正则表达式。例如过滤规则/banner\d+/会匹配matchbanner123banner321但是不匹配banners。您可以查看 正则表达式的文档 来学习如何写正则表达式。

:由于性能原因,建议尽可能避免使用正则表达式。

元素隐藏

基本规则

有时你可能会发现无法阻挡某些内嵌在网页中的文字广告。如果查看源码的话,可能发现类似这样的代码:

     class="textad"> 
    Cheapest tofu, only here and now! 
   
 
    id="sponsorad"> 
    Really cheap tofu, click here! 
   
 
     
    Only here you get the best tofu! 
   

因为你必须下载页面的内容,所以你也必须下载这些广告。对于这种情况,你可以做的就是-把这些广告藏起来,这样你就不会看到他们了。这也就是元素隐藏的意义所在。

上面代码中的第一则广告是在一个class属性为“textad”的div容器内。过滤规则##div.textad可以把它给隐藏起来。这里的##表明这是一条定义了元素隐藏的选择符的元素隐藏规则类似地,您可以通过他们的id属性隐藏属性, ##div#sponsorad将隐藏的第二广告。你也可以不必指定元素名称,用##*#sponsorad 也可以。你也可以仅指定要阻挡的元素名称来隐藏,例如:##textad可以阻挡第三则广告。

在不查看页面源码的情况下,Element Hiding Helper extension 帮助选择正确的元素并写出相应的规则基础的HTML知识还是很有用的。

:元素隐藏规则与普通过滤规则的工作方式有很大的差别。元素隐藏规则不支持通配符。

隐藏元素:限定在特定域名的规则

通常你只想要隐藏特定网站的特定广告,而不希望规则会作用于其他网站。例如:##*.sponsor可能会把某些网站的有效代码也隐藏了。但如果你把隐藏规则写成example.com##*.sponsor,这规则就只会作用在 http://example.com/http://something.example.com/,但不作用在http://example.org/。你也可以指定多个域名-只要用逗号(,)分隔即可,例如: domain1.example,domain2.example,domain3.example##*.sponsor

如果在域名之前有“ ~ ” ,该规则将适用于这个域名的页面。(需要AdBlock Plus1.1或更高版本) 。例如, ~example.com##*.sponsor将适用于除了“example.com”之外的域名。 example.com|~foo.example.com##*.sponsor适用于除了“example.com”和“foo.example.com“外的域名。

:由于元素隐藏实际实现的关系,你只可以将隐藏规则限制在完整的域名。你不能使用网址的其他部份,也不可用 domain 代替domain.example,domain.test

:限制域名的元素隐藏规则也可用来隐藏浏览器的使用界面。例如, 过滤规则browser##menuitem#javascriptConsole会隐藏Firefox的工具菜单上的JavaScript控制台。

属性选择符

一些广告隐藏起来并不容易——这些文字广告不仅没有id也没有class属性。你需要使用其他属性来隐藏这些广告,例如:##table[width=80%]可以隐藏拥有width属性值为80%的表格元素。如果你不想隐藏这个属性的所有值,##div[title*="adv"]会隐藏所有title属性包含adv字符的div元素。你还可以检查属性的开始和结束字符。例如##div[title^="adv"][title$="ert"]会隐藏以adv开始并且以ert结束的div元素。正如你所见,你可以使用多个条件,table[width="80%"][bgcolor="white"]会隐藏宽度设为80%、背景色(bgcolor)属性为白色的表格元素。

高级选择符

一般情况下,Firefox支持的 CSS选择符都可用于元素隐藏。例如:下面的规则会隐藏跟在class的属性为adheaderdiv元素后的所有东西:##div.adheader + *。完整的CSS列表请查阅W3C的CSS规范(Firefox目前并没有支持所有的选择符)。

:这个功能是给高级使用者使用的,你可以通过CSS选择符很舒服地去使用它。Adblock Plus 无法检查选择符的语法是否正确,如果你使用无效的 CSS 语法,你可能会破坏其他你已有的过滤规则。建议使用 JavaScript Console 检查是否有 CSS 错误。

简单元素隐藏语法

Adblock Plus 只向后支持简单元素隐藏语法 (例如#div(id=foo))。使用这个语法是不好的,用CSS选择符才是首选。对这个语法的支持可能在以后的某个时间就不支持了。