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.
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.
Ü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.
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) nur Firefox 3 oder höherping— Link-Rückmeldungen nur Firefox 3 oder höherxmlhttprequest— Anfragen, die vom XMLHttpRequest-Objekt gestartet werden nur Firefox 3 oder höherobject-subrequest— Anfragen, die von Plugins wie zum Beispiel Flash gestartet werden nur Firefox 3 oder höherdtd— DTD-Dateien, die von XML-Dokumenten geladen werden nur Firefox 3 oder höhersubdocument— eingebettete Seiten, in der Regel per HTML-Frames eingebundendocument— die Seite selber (nur Ausnahmeregeln werden auf die Adresse der Seite angewandt)other— andere Arten von Anfragen (vor Firefox 2 umfaßt das auch XBL-Bindings und XMLHttpRequest-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,~other 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: Man sollte von regulären Ausdrücken nicht erwarten, dass sie die Verarbeitung der Filter beschleunigen. Zwar hört man oft diese Empfehlung, sie ist aber veraltet — seit Adblock Plus 0.7 wurde die Verarbeitung einfacher Filterregeln stark beschleunigt, so dass sie jetzt viel schneller als reguläre Ausdrücke abgearbeitet werden. Man sollte reguläre Ausdrücke nur dann verwenden, wenn das unbedingt nötig ist.
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). Genauso können auch 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.
Woher weiß man nun, was man in der Filterregel angeben kann? Man hat zwei Möglichkeiten: entweder man sucht im Quelltext der Seite nach dem Text (Text markieren und über Kontextmenü “Auswahl-Quelltext anzeigen” macht es einfacher) oder man benutzt DOM Inspector (Benutzer von Firefox können bei der Installation von Firefox “Benutzerdefinierte Installation” auswählen und DOM Inspector automatisch mitinstallieren lassen). Grundkenntnisse in HTML sind in beiden Fällen empfehlenswert. HTML-Grundkenntnisse sind in beiden Fällen empfehlenswert.
Bemerkung: Das Verstecken von Elementen ist völlig anders realisiert als das “normale” Blockieren. Daher werden Jokerzeichen nicht unterstützt, die Trefferstatistik funktioniert für diese Regeln nicht und Ausnahmeregeln werden ignoriert.
Verstecken von Elementen: 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).
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.
Verstecken von Elementen: 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.
Verstecken von Elementen: Direktes Verwenden von CSS
Wenn das Auswählen von Elementen nach ihren Attributen nicht ausreicht, kann man das Potential der CSS-Selektoren direkt ausnutzen. Folgende regel wird alles verstecken, was einem div-Element der Klasse “adheader” folgt: ##div.adheader + *. Die zwei Rauten am Anfang geben dabei an, dass der nachfolgende Text ein CSS-Selektor [en] ist.
Bemerkung: Diese Funktion ist nur für erfahrene Nutzer gedacht. 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 funktioneren. Man sollte stets die JavaScript Konsole auf CSS-Fehler überprüfen.
Kompatibilität (Adblock und verschiedene Versionen von Adblock Plus)
Dieses Dokument beschreibt die Möglichkeiten, die einem mit Adblock Plus 0.7 zur Verfügung stehen. Wenn man allerding eine Filterliste erstellt und sie mit anderen teilt, sollte man vielleicht die Unterschiede zu Adblock und zu älteren Versionen von Adblock Plus im Hinterkopf behalten. Ein kleiner Überblick über diese Unterschiede:
- Übereinstimmungen nur am Anfang/Ende der Adresse zulassen: wird nur von Adblock Plus 0.6.1.2 und höher unterstützt
- Ausnahmeregeln: in Adblock 0.5 und Adblock Plus 0.5 funktionieren Ausnahmeregeln mit vorangestellten
nur für einzelne Elemente jedoch nicht für komplette Seiten. Ausnahmen für komplette Seiten werden anders (und nicht mit Filterregeln) definiert. Weiterhin zu beachten: Ausnahmeregeln werden in Adblock erst ab Version 0.5.3.40 unterstützt. - Kommentare: Adblock 0.5 und Adblock Plus vor Version 0.7 interpretieren Kommentare als normale Filterregeln. Allerdings hielt das Filterlisten-Ersteller nicht davon ab, sie zu benutzen. Die Wahrscheinlichkeit, dass diese Regeln je etwas blockieren, ist äußerst gering.
- Filter-Attribute: nur unterstützt in Adblock Plus 0.7.1 und höher.
- Verstecken von Elementen: wurde eingeführt in Adblock Plus 0.6.1, welches aber nur die Grundregeln beherrschte. Attribut-Selektoren, direktes Verwenden von CSS und Begrenzung der Regeln auf Domains kam erst mit Adblock Plus 0.7 dazu. Adblock Plus 0.5 hatte eine Funktion, die “DIV-Blockierung” genannt wurde und einen ähnlichen Zweck erfüllte. Während die Syntax absichtlich ähnlich gehalten wurde, ist die Implementierung völlig anders. Dementsprechend gibt es keine einfache Möglichkeit, DIV-Blockierung-Regeln in Regeln zum Verstecken von Elementen umzuwandeln oder umgekehrt.
