Filter für Adblock Plus erstellen
Die aktuellen Versionen von Adblock Plus ermöglichen es, die Filter auf vielerlei Weise zu optimieren. Hier wird nun erklärt, welche Möglichkeiten zur Verfügung stehen und wofür man sie nutzen kann.
Hinweis: Alle hier genannten Filter dienen nur der Veranschaulichung. Sie sind nicht dazu gedacht, wirklich eingesetzt zu werden.
Einleitung in Filtererstellung
Die Möglichkeiten, die in diesem Abschnitt beschrieben werden, sollten für die Benutzer, die nur gelegentlich Filter erstellen, bereits ausreichend sein.
Einfache Filterregeln
Als neuer Adblock-Nutzer nimmt man als Filterregel natürlich einfach die Adresse des Werbebanners, das man blockieren will. Leider ändert sich diese aber meist, wenn man die Seite nochmal aufruft. Beispielsweise könnte die Adresse http://example.com/ads/banner123.gif lauten, wobei es sich bei 123 um eine zufällige Zahlenkombination handelt. In einem solchen Fall hilft es nicht, die komplette Adresse als Filter zu nehmen, man braucht eine allgemeinere Regel — z. B. http://example.com/ads/banner*.gif. Oder vielleicht sogar http://example.com/ads/*.
Bemerkung: Man sollte mit Joker-Zeichen (”*”) vorsichtig umgehen. Der Filter http://example.com/* wird wohl die Werbung erfolgreich entfernen, aber auch alles andere, was von example.com kommt, obwohl man es vielleicht noch sehen möchte.
Ausnahmeregeln
Manchmal kann es passieren, dass ein Filter relativ gut und zuverlässig blockiert, aber in einem bestimmten Fall etwas entfernt, was man dennoch sehen will. Man will nun einerseits den zuverlässigen Filter nicht löschen, aber möchte denn blockierten Inhalt auf einer bestimmten Seite betrachten können.
Aus diesem Grund gibt es die Ausnahmeregeln — sie erlauben einem genau festzulegen, wann ein Filter nicht verwendet werden soll. Wenn man z. B. Probleme mit dem Filter adv hat, weil er http://example.com/advice.htmlblockiert, kann man die Ausnahmeregel @@advice. einführen. Ausnahmeregeln unterscheiden sich nicht von anderen Filterregeln; man kann auch hier Joker und reguläre Ausdrücke verwenden. Der einzige Unterschied ist, dass man @@ voransetzen muss, um den Filter als Ausnahmeregel zu markieren. Solche Filter erscheinen grün in der Filterliste.
Ausnahmeregeln können aber auch noch mehr: Wenn eine Ausnahmeregel mit http:// oder https:// anfängt (optional noch mit dem Pipe-Symbol davor), wird diese Regel auch auf ganze Seiten angewandt. Trifft sie auf die Adresse einer Seite zu, wird die gesamte Seite von Adblock Plus ignoriert (sogar die Liste blockierbarer Elemente bleibt leer). Wenn man also z. B. die Ausnahmeregel @@|http://example.com in der Liste hat und dann irgendeine Seite auf example.com öffnet, wird Adblock Plus auf dieser Seite komplett deaktiviert, es wird nichts blockiert.
Übereinstimmungen nur am Anfang/Ende der Adresse zulassen
Normalerweise behandelt Adblock Plus jeden Filter so, als ob er am Anfang und am Ende ein Jokerzeichen hätte; so besteht kein Unterschied zwischen den Filterregeln ad und *ad*. In den meisten Fällen ist dies unproblematisch, manchmal möchte man aber, dass nur am Anfang bzw. Ende der Adresse nach Übereinstimmungen mit dem Filter gesucht wird. Beispielsweise könnten Sie sämtliche Flash-Animationen blockieren wollen, aber mit dem Filter swf wird nebenbei auch die Adresse http://example.com/swf/index.html nicht angezeigt.
Um dieses Problem zu lösen, kann man das Pipe-Symbol (”|”) am Anfang bzw. Ende des Filters hinzufügen, damit Adblock Plus weiß, dass die Adresse dort wirklich aufhören soll. Somit wird beispielsweise der Filter swf| die Flash-Animation http://example.com/haessliches_flash.swf blockieren, aber nicht mehr http://example.com/swf/index.html. Und der Filter |http://boese-domain.example/ wird zwar http://boese-domain.example/banner.gif blockieren, aber nicht http://gute-domain.example/analyze?http://boese-domain.example.
Manchmal will man sowohl http://example.com/banner.gif als auch https://example.com/banner.gif und http://www.example.com/banner.gif blockieren. Mit zwei Pipe-Symbolen (”||”) am Anfang des Filters kann man den Anfang des Domainnamens markieren: ||example.com/banner.gif blockiert alle diese Adressen, jedoch nicht http://badexample.com/banner.gif oder http://gooddomain.example/analyze?http://example.com/banner.gif (Adblock Plus 1.1 oder höher wird benötigt).
Platzhalter für Trennzeichen
Oft will man an einer bestimmten Stelle im Filter jedes Trennzeichen akzeptieren. So will man zum Beispiel mit einem Filter sowohl http://example.com/ als auch http://example.com:8000/ blockieren, jedoch nicht http://example.com.ar/. Hier ist das Symbol ^ nützlich, das als Platzhalter für ein Trennzeichen interpretiert wird: http://example.com^ (Adblock Plus 1.1 oder höher wird benötigt).
Ein Trennzeichen ist jedes Zeichen außer Buchstaben, Ziffern oder eines der folgenden Zeichen: – . %. Das Ende der Adresse wird ebenfalls als “Trennzeichen” akzeptiert. Im folgenden Beispiel sind alle Trennzeichen rot hervorgehoben: http://example.com:8000/foo.bar?a=12&b=%D1%82%D0%B5%D1%81%D1%82. Somit wird diese Adresse von den Filtern ^example.com^, ^%D1%82%D0%B5%D1%81%D1%82^ oder ^foo.bar^ blockiert.
Kommentare
Jeder Eintrag, der mit einem Ausrufezeichen beginnt, wird als Kommentar betrachtet. Er wird weiterhin in der Filterliste angezeigt, allerdings in Grau anstatt von Schwarz wie normale Filter. Adblock Plus ignoriert diesen Eintrag für das eigentliche Blockieren, so dass dort alles schreiben kann, was man will. Man kann z.B. ein Kommentar über einem Filter plazieren, um zu beschreiben, was dieser macht. Oder Sie könnten ein Kommentar am Anfang Ihrer Filterliste positionieren, um zu zeigen, von wem die Liste stammt (die meisten Autoren von Filterlisten machen es so).
Möglichkeiten für Fortgeschrittene
In dieser Sektion werden Funktionen von Adblock Plus beschrieben, die in der Regel nur von erfahrenen Nutzern und Autoren von Filterlisten eingesetzt. Sie können diese ohne Probleme überspringen.
Filter-Attribute angeben
Adblock Plus erlaubt es, mit einigen Attribute das Verhalten des Filters zu ändern. Diese Attribute können mit Kommas getrennt nach einem Dollar-Zeichen ($) am Ende des Filters aufgelistet werden, z.B.:
*/ads/*$script,match-case
Here ist */ads/* der eigentliche Filter, script und match-case sind dessen Attribute. Folgende Attribute werden derzeit unterstützt:
- Typ-Attribute: bestimmen, welche Element-Typen von dem Filter blockiert (oder im Fall von Ausnahmeregeln von der Blockierung ausgenommen) werden können. Man kann mehrere Typ-Attribute kombinieren, um den Filter auf mehrere Element-Typen anzuwenden. Mögliche Typen:
script— externe Scripte, die mit dem HTML-Tag “script” geladen werdenimage— normale Bilder, in der Regel mit dem HTML-Tag “img” eingebundenbackground— Hintergrundbilder, oft in CSS festgelegtstylesheet— externe CSS-Dateien (Cascading Style Sheets)object— Inhalte, die von Browser-Plugins dargestellt werden, wie z.B. Flash oder Javaxbl— XBL-Bindings (normalerweise geladen von der CSS-Eigenschaft-moz-binding)ping— Link-Rückmeldungenxmlhttprequest— Anfragen, die vom XMLHttpRequest-Objekt gestartet werdenobject-subrequest— Anfragen, die von Plugins wie zum Beispiel Flash gestartet werdendtd— DTD-Dateien, die von XML-Dokumenten geladen werdensubdocument— eingebettete Seiten, in der Regel per HTML-Frames eingebundendocument— die Seite selber (nur Ausnahmeregeln werden auf die Adresse der Seite angewandt)elemhide— nur für Ausnahmeregeln; ähnlich wiedocument, deaktiviert aber nur Regeln zum Verstecken von Elementen auf der Seite, anstatt alle Filterregeln zu deaktvieren (Adblock Plus 1.2 oder höher notwendig)other— andere Arten von Anfragen
- Inverse Typ-Attribute: geben Element-Typen an, auf die der Filter nicht angewandt werden soll. Mögliche inverse Typ-Attribute:
~script,~image,~background,~stylesheet,~object,~xbl,~ping,~xmlhttprequest,~object-subrequest,~dtd,~subdocument,~document,~elemhide,~other - Einschränkung auf Elemente von Drittseiten/der Ursprungsseite: Wenn das Attribut
third-partyangegeben ist, wird der Filter nur auf solche Anfragen angewandt, die nicht an die Domain der gerade betrachteten Seite gehen. Dementsprechend bedeutet das Attribut~third-party, dass der Filter nur auf Anfragen angewandt werden sollte, die an die Domain der betrachteten Seite gehen. - Domain-Einschränkungen: Das Attribut
domain=example.combedeutet, dass der Filter nur auf Seiten aktiv werden sollte, die zur Domain “example.com” gehören. Mehrere Domains können mit dem Zeichen “|” getrennt werden: mit dem Attributdomain=example.com|example.netwird der Filter nur auf Domains “example.com” und “example.net” angewandt. Wird ein Domainname von “~” angeführt, wird der Filter auf Seiten dieser Domain nicht angewandt. Zum Beispiel bedeutetdomain=~example.com, dass der Filter auf allen Domains außer “example.com” angewandt werden soll. Unddomain=example.com|~foo.example.combeschränkt den Filter auf die Domain “example.com” mit Ausnahme der “foo.example.com” Unterdomain. match-case— dieses Attribut sorgt dafür, dass Groß- und Kleinschreibung beachtet wird. So blockiert der Filter*/BannerAd.gif$match-casedie Adressehttp://example.com/BannerAd.gif, aber nichthttp://example.com/bannerad.gif.collapse— diese Option setzt die globale Einstellung “Platz von blockierten Elementen freigeben” außer Kraft und stellt sicher, dass dieser Filter den Platz immer freigibt. Entsprechend sorgt die Option~collapsedafür, dass der Platz nie freigegeben wird.
Verwendung von regulären Ausdrücken
Wenn man noch mehr Kontrolle darüber haben will, was eine Filterregel blockiert und was nicht, kann man auch reguläre Ausdrücke verwenden. Beispielsweise wird der Filter /banner\d+/ Adressen, die banner123 oder banner321 enthalten, entfernen, die Zeichenfolge banners aber ignorieren. Der Artikel über reguläre Ausdrücke auf Wikipedia erklärt, wie reguläre Ausdrücke aufgebaut sind.
Bemerkung: Aus Geschwindigkeitsgründen wird von der Verwendung von regulären Ausdrücken abgeraten.
Verstecken von Elementen
Grundregeln
Manchmal findet man Werbung, die sich nicht blockieren lässt, weil sie in die Seite als Text eingebunden ist. Wenn man sich den Quelltext der Seite anschaut, findet man beispielsweise folgendes:
<div class="textad"> Güngstigstes Tofu, nur hier und jetzt! <div> <div id="sponsorad"> Wirklich günstiges Tofu, hier klicken! <div> <textad> Nur hier kriegt man das beste Tofu! </textad>
Die Web-Seite kann nur komplett heruntergeladen werden, somit wird diese Werbung auch immer heruntergeladen. Solche Werbung kann man einzig und allein verstecken, damit sie nicht angezeigt wird. Dafür gibt es in Adblock Plus die Funktion “Verstecken von Elementen”.
Die erste Anzeige befindet sich innerhalb eines div-Elements mit Attribut class=“textad”. Die folgende Regel wird diese Kombination verstecken: ##div.textad. Hier markiert ## eine Regel zum Verstecken während der Rest der Regel ein Selektor ist, der das Element auswählt. Genauso können Elemente auch anhand ihres id-Attributes versteckt werden, ##div#sponsorad wird also auch die zweite Anzeige verstecken. Den Namen des Elements braucht man nicht unbedingt anzugeben, die Regel ##*#sponsorad wird also auch funktionieren. Und die dritte Anzeige kann man allein anhand des Element-Namens verschwinden lassen, also z. B. mit der Filterregel ##textad.
Die Erweiterun Element Hiding Helper hilft dabei, das korrekte Element auszuwählen und die dazugehörige Regel zu schreiben, ohne den Quelltext der Seite begutachten zu müssen. HTML-Grundkenntnisse sind trotzdem empfehlenswert.
Bemerkung: Das Verstecken von Elementen ist völlig anders realisiert als das “normale” Blockieren. Daher werden Jokerzeichen nicht unterstützt.
Regeln auf eine Liste von Domains begrenzen
Normalerweise will man eine konkrete Anzeige nur auf einer Seite verstecken, diese Regel soll nicht auf anderen Seiten angewandt werden. So könnte beispielsweise die Regel ##*.sponsor auf einer Seite etwas verstecken, was man eigentlich sehen möchte. Wird diese Regel aber als example.com##*.sponsor geschrieben, wird diese nur auf http://example.com/ oder http://something.example.com/ angewandt, jedoch nicht auf http://example.org/. Man kann auch mehrere Domains angeben — einfach mit Kommas trennen: domain1.example,domain2.example,domain3.example##*.sponsor.
Wird ein Domainname von “~” angeführt, wird die Regel auf Seiten dieser Domain nicht angewandt (Adblock Plus 1.1 oder höher erforderlich). So wird zum Beispiel ~example.com##*.sponsor auf allen Domains außer “example.com” und example.com,~foo.example.com##*.sponsor auf der Domain “example.com” mit Ausnahme der Unterdomain “foo.example.com” angewandt.
Bemerkung: Aufgrund der Implementierung kann man die Regeln zum Verstecken von Elementen nur auf ganze Domainnamen begrenzen. Andere Teile der Adresse kann man nicht verwenden, auch kann man domain nicht anstatt von domain.example,domain.test nehmen.
Bemerkung: Regeln, die auf eine Domain beschränkt sind, können auch auf Elemente im Benutzerinterface des Browsers angewandt werden. Beispielsweise wird die Regel browser##menuitem#javascriptConsole den Eintrag für die JavaScript Konsole im Extras-Menü von Firefox verschwinden lassen.
Attribut-Selektoren
Einige Werbefirmen manchen es einem nicht leicht — ihre Textwerbung hat weder ein Attribut id noch class. Eventuell kann man diese aber anhand von anderen Attributen verstecken, die für diese Werbung typisch sind. Beispielsweise wird die Regel ##table[width="80%"] alle Tabellen verstecken, mit width-Attribut 80% verstecken. Man kann auch einen Teil des Attributs festlegen, so wird ##div[title*="adv"] alle div-Elemente verstecken, deren Attribut title die Zeichenfolge “adv” enhält. Man kann auch genauer angeben, dass sich die Zeichenfolge am Anfang bzw. Ende des Attributs befinden soll: ##div[title^="adv"][title$="ert"] wird nur div-Elemente verstecken, deren title-Attribut mit “adv” anfängt und mit “ert” endet. Und wie man hier sieht, kann man mehrere Bedingungen kombinieren, um die Regel spezifischer zu machen — table[width="80%"][bgcolor="white"] wird Tabellen verstecken, die nicht nur Breite 80% haben, sondern bei denen auch die Hintergrunfarbe als weiß angegeben ist.
Fortgeschrittene Selektoren
Im Prinzip kann man jeden CSS-Selektor für Verstecken von Elementen verwenden, der von Firefox unterstützt wird. Zum Beispiel wird folgende Regel alles verstecken, was einem div-Element der Klasse “adheader” folgt: ##div.adheader + *. Für eine komplette Liste der CSS-Selektoren siehe CSS-Dokumentation von W3C (es werden noch nicht alle Selektoren von Firefox unterstützt).
Bemerkung: Diese Funktion setzt etwas Erfahrung voraus. Man sollte sich mit CSS-Selektoren auskenne, da Adblock Plus nicht in der Lage ist, die Syntax zu überprüfen. Wird eine falsche Regel eingegeben, kann das dazu führen, dass auch andere Regeln nicht mehr funktionieren. Man sollte stets die Fehlerkonsole auf CSS-Fehler überprüfen.
Simplified element hiding syntax
Adblock Plus supports simplified element hiding syntax (e.g. #div(id=foo)) for backwards compatibility only. Using this syntax is discouraged, usual CSS selectors are preferred. Support for this syntax might be removed at some point.
