Créer des filtres Adblock Plus
Les versions actuelles d'Adblock Plus vous permettent de fabriquer vos propres filtres de plusieurs manières différentes. Ce document explique les possibilités qui sont à votre disposition et comment les utiliser.
Décharge de responsabilité : tous les exemples de filtres donnés ici ne sont vraiment que des exemples et ne sont pas destinés à être utilisés.
Introduction aux filtres Adblock Plus
Les options décrites dans cette rubrique devraient être suffisantes pour les utilisateurs ayant besoin de créer un filtre occasionnellement.
Règles de filtres basiques
Le filtre le plus trivial que vous puissiez créer est naturellement l'adresse de la publicité que vous souhaitez bloquer. Cependant, souvent cette adresse change lorsque vous affichez votre page. Cela pourrait être par exemple http://example.com/ads/banner123.gif où 123 est un nombre aléatoire. Dans ce cas, bloquer cette adresse ne sera pas d'une grande utilité, vous devriez donc créer un filtre plus général — tel que http://example.com/ads/banner*.gif, ou peut-être http://example.com/ads/* seule.
Remarque : assurez-vous que vous ne remplacez pas trop de choses par des jokers (*). Le filtre http://example.com/* bloquera toutes les publicités mais bloquera également toutes autres pages provenant de example.com que vous souhaiteriez peut-être tout de même voir.
Définition de règles d'exception
De temps à autres vous constaterez qu'un de vos filtres qui fonctionne habituellement correctement, bloque quelque chose qu'il ne devrait pas bloquer. Vous ne souhaitez pas supprimer ce filtre mais il ne devrait plus bloquer ce qu'il vient de bloquer.
Ce sont les règles d'exception (liste blanche) qui se chargent de cela — Elles vous permettent de définir des situations dans lesquelles les filtres ne devront pas être appliqués. Par exemple, si vous n'êtes pas satisfait de votre filtre adv qui bloque http://example.com/advice.html, vous pouvez créer une règle d'exception @@advice. Les règles d'exception ne sont pas très différentes des filtres de publicités, vous pouvez utiliser des jokers (*) et des expressions régulières. Vous n'avez qu'à les faire débuter par @@ pour indiquer que ce sont des règles d'exception.
Les règles d'exception peuvent faire davantage. Si une règle d'exception commence par http:// ou https:// (avec une barre verticale | optionnellement avant) cela permettra d'ajouter toutes les pages Web dans les exceptions (liste blanche). Par exemple, si votre règle d'exception est @@|http://example.com et vous ouvrez des pages de example.com — Adblock Plus sera complètement désactivée pour cette page et rien ne sera bloqué.
Coïncidence avec le début/la fin d'une adresse
Normalement Adblock Plus traite chaque filtre comme s'il possédait un joker (*) au début et à la fin. Exemple : il n'y a aucune différence entre les filtres ad et *ad*. Ceci ne pose aucun problème en général, mais quelquefois vous souhaiteriez peut-être que le filtre que vous avez défini ne corresponde qu'au début ou qu'à la fin d'une adresse. Vous souhaitez, par exemple, bloquer toutes les animations Flash, mais si vous ajoutez le filtre swf (extension des animations Flash) l'adresse http://example.com/swf/index.html sera également bloquée.
La solution à ce problème : ajouter le symbole trait vertical (|) au filtre pour indiquer que c'est la fin de l'adresse qui devra correspondre au filtre pour être bloquée. Par exemple le filtre swf| bloquera http://example.com/annoyingflash.swf mais pas http://example.com/swf/index.html. Et le filtre |http://mauvaisdomaine.exemple/ bloquera http://mauvaisdomaine.exemple/banner.gif mais pas http://bondomaine.exemple/analyze?http://mauvaisdomaine.exemple seule.
De temps à autre vous voudriez bloquer http://example.com/banner.gif ainsi que https://example.com/banner.gif et que http://www.example.com/banner.gif. Cela peut se faire en plaçant deux traits verticaux devant le filtre qui vérifie si le filtre correspond au début du nom de domaine : ||example.com/banner.gif bloquera toutes ces adresses mais pas celle-là : http://mauvaisexample.com/banniere.gif ou http://bondomain.example/analyze?http://example.com/banniere.gif (Adblock Plus 1.1 ou supérieur est nécessaire).
Marquage des caractères séparateurs
Souvent vous devez accepter des caractères séparateurs dans des filtres. Par exemple, vous pouvez créer un filtre qui bloque http://example.com/ et http://example.com:8000/ mais pas http://example.com.ar/. Dans ce cas, le symbole ^ pourra être utilisé comme un remplaçant d'un caractère séparateur : http://example.com^ (Adblock Plus 1.1 ou supérieur est nécessaire).
Un caractère séparateur est tout sauf une lettre, un nombre ou un des caractères suivants : _ - . %. La fin d'une adresse est également acceptée comme étant un séparateur. Dans l'exemple suivant, tous les caractères séparateurs sont affichés en rouge : http://example.com:8000/foo.bar?a=12&b=%D1%82%D0%B5%D1%81%D1%82. Cette adresse pourra être bloquée par le filtre ^example.com^ ou ^%D1%82%D0%B5%D1%81%D1%82^ ou ^foo.bar^ seule.
Commentaires
Toute règle débutant par un point d'exclamation sera considérée comme étant un commentaire. Elle sera affichée dans la liste de filtres mais grisée au lieu d'être en noir. Adblock Plus ignorera cette règle pour le blocage, elle permet donc d'écrire ce que l'on veut. Vous pouvez ainsi placer un commentaire pour décrire la fonction de tels ou tels filtres. Vous pouvez également indiquer votre nom et la propriété de votre liste en haut de la liste de filtres (beaucoup d'auteurs de listes le font).
Fonctionnalités avancées
Les fonctions décrites dans cette rubrique ne sont utilisées habituellement que par les utilisateurs confirmés et les créateurs de listes de filtres. Vous n'êtes donc pas obligé de lire cette rubrique.
Spécification des options de filtrage
Adblock Plus vous permet de spécifier un certain nombre d'options pour modifier le comportement d'un filtre. Vous devez lister ces options en les séparant par une virgule et en les faisant débuter par un dollar ($) à la fin du filtre. Exemple :
*/ads/*$script,match-case
Ici */ads/* est le filtre et script et match-case sont ses options. Pour le moment, sont disponibles les options suivantes :
- Options de type : détermine quel type d'éléments le filtre peut bloquer (ou autoriser en cas de liste blanche). De nombreux types d'options peuvent être spécifiés pour indiquer que le filtre devra être appliqué à plusieurs types d'éléments. Les types possibles sont :
script— scripts externes chargés via la balise HTML scriptimage— images normales, chargées typiquement via la balise HTML imgstylesheet— fichiers de feuille de style CSS externesobject— contenu traité par des plugins du navigateur comme par exemple Flash ou Javaxmlhttprequest— requêtes démarrées par l'objet XMLHttpRequestobject-subrequest— requêtes démarrées par les plugins comme Flashsubdocument— pages incorporées (embedded), habituellement incluses via la balise HTML framesdocument— la page elle-même (uniquement les règles d'exception peuvent être appliquées à la page)elemhide— uniquement pour les règles d'exception, comme pourdocumentmais ne désactive que les règles de masquage d'élément sur la page plutôt que toutes les règles de filtre (Adblock Plus 1.2 et supérieur nécessaire)other— d'autres types de requêtes telles que liaisons XBL, requêtes http XML ou données demandées par des objets. Cela signifie : les types de requêtes non appréhéndées par la liste ci-dessus
background,xbl,pingetdtdsont obsolètes et ne doivent plus être utilisées. - Options de type inverse : spécifie les types d'éléments auxquels le filtre ne doit pas être appliqué. Les options de type inverse possibles sont :
~script,~image,~stylesheet,~object,~xmlhttprequest,~object-subrequest,~subdocument,~document,~elemhide,~other - Restriction aux requêtes third-party/first-party (provenant d'un autre/du même site) : Si l'option
third-partyest spécifiée, le filtre n'est appliqué qu'aux requêtes provenant d'une autre origine que la page actuellement affichée. De manière similaire,~third-partyrestreint l'action du filtre aux requêtes provenant de la même origine que la page couramment affichée. - Restrictions de domaines : l'option
domain=example.comsignifie que le filtre ne devra s'appliquer qu'aux pages provenant du domaine "example.com". Plusieurs domaines peuvent être spécifiés en utilisant "|" comme séparateur : avec l'optiondomain=example.com|example.netle filtre ne s'appliquera qu'aux pages provenant des domaines "example.com" ou "example.net". Si un nom de domaine est précédé par "~", le filtre ne s'appliquera pas aux pages de ce domaine. Par exemple,domain=~example.comsignifie que le filtre devra s'appliquer à toutes les pages sauf celles provenant de "example.com" etdomain=example.com|~foo.example.comrestreint l'action du filtre au domaine "example.com" avec comme exception le sous-domaine "foo.example.com". match-case— fait en sorte que le filtre ne s'applique qu'aux adresses correspondant à la casse (prise en compte des minuscules et des majuscules), par exemple, le filtre*/BannerAd.gif$match-casebloquerahttp://example.com/BannerAd.gifmais pashttp://example.com/bannerad.gifseule.collapse— cette option va se substituer à l’option globale « Masquer les conteneurs des éléments bloqués » et va faire en sorte que le filtre masque le conteneur à coup sûr. De la même façon, l'option~collapsepermet d’éviter que le conteneur de l’élément ne soit masqué.-
donottrack— pour toute adresse correspondant à une règle de blocage et ne correspondant à aucune règle d’exception, un en-tête Do-Not-Track sera envoyé grâce à cette option (requiert Adblock Plus 1.3.5 ou supérieur). Pour assurer une rétrocompatibilité, il est recommandé d’utiliser cette option en association avec des options de type contradictoires, ce qui permettra d’éviter que le filtre ne bloque rien avec les versions antérieurs d’Adblock Plus :*$donottrack,image,~image
Utilisation d'expressions régulières
Si vous souhaitez davantage de précision de filtrage vous pouvez utiliser des expressions régulières. Par exemple, le filtre /banner\d+/ bloquera banner123 et banner321 mais pas banners. Vous pouvez lire une documentation sur les expressions régulières pour apprendre à en créer.
Remarque : Pour des raisons de performances il est recommandé de ne pas utiliser d'expressions régulières tant que cela peut être évité.
Cacher des éléments
Règles basiques
Parfois vous trouverez des publicités impossible à bloquer car elles sont intégrées en tant que texte dans la page Web. Si vous affichez le code source de cette page, vous trouverez probablement quelque chose de ce style :
<div class="textad"> Tofu le moins cher, uniquement ici et immédiatement ! </div> <div id="sponsorad"> Tofu très économique, cliquez ici ! </div> <textad> Vous ne trouverez nulle part ailleurs un meilleur tofu ! </textad>
Vous devez charger la page Web, vous téléchargerez donc obligatoirement les publicités. Tout ce que vous pouvez encore faire, c'est de cacher la publicité pour ne pas la voir s'afficher. La fonctionnalité "Cacher les éléments" vous permettra de faire cela.
La première publicité dans l'exemple ci-dessus est contenue dans un élément div avec un attribut de classe "textad". Le filtre suivant cachera exactement cette combinaison : ##div.textad. Ici ## marque une règle de masquage d'élément alors que le reste est un sélecteur identifiant les éléments devant être masqués. Vous pouvez de la même manière cacher des éléments par leur attribut d'id, ##div#sponsorad cachera la seconde publicité. Vous n'êtes pas obligé de spécifier le nom d'élément, le filtre ##*#sponsorad fonctionnera tout aussi bien. Sur le même principe, vous pouvez cacher des éléments par leur nom, par exemple ##textad pour la troisième publicité.
L'extension Element Hiding Helper extension aide à sélectionner le bon élément et à écrire la règle correspondante sans avoir à afficher le code source de la page. Des connaissances basiques en HTML sont tout de même utiles.
Remarque : cacher les éléments fonctionne totalement différemment par rapport aux filtres normaux. Ce qui implique que les jokers ne peuvent être utilisés dans ce genre de filtres.
Limitation des règles à certains domaines
En général vous souhaitez cacher une publicité spécifique sur un site spécifique, vous ne souhaitez pas appliquer le filtre à d'autres sites. Par exemple le filtre ##*.sponsor pourrait cacher des codes valides sur certains sites. Mais si vous écrivez example.com##*.sponsor il sera appliqué aux sites http://example.com/ et http://something.example.com/ mais pas à http://example.org/. Vous pouvez également spécifier plusieurs domaines — séparez-les simplement par des virgules : domain1.example,domain2.example,domain3.example##*.sponsor seule.
Si un nom de domaine est précédé par un "~", la règle ne sera pas appliquée pour les pages de ce domaine (Adblock Plus 1.1 ou supérieur est nécessaire). Par exemple, ~example.com##*.sponsor sera appliqué à toutes les pages de tout domaine sauf "example.com" et example.com,~foo.example.com##*.sponsor fera appliquer la règle sur le domaine "example.com" avec comme exception le sous-domaine "foo.example.com".
Remarque : A cause de la manière avec laquelle "cacher les éléments" est implémentée, vous ne pouvez que vous limiter à des noms de domaines complets. Vous ne pouvez utiliser une autre partie de l'adresse et vous ne pouvez pas utiliser domain afin de remplacer domain.example,domain.test seule.
Remarque : Les règles pour cacher des éléments en limitant par domaine peuvent également être utilisées pour cacher des éléments de l'interface utilisateur. Exemple : le filtre browser##menuitem#javascriptConsole cachera l'entrée "Console javascript" dans le menu "Outils" de Firefox.
Sélecteurs d'attribut
Certains publicitaires ne vous facilitent pas la tâche — leur texte publicitaire ne comporte ni un attribut classe, ni un attribut id. Dans ce cas, vous pouvez utiliser d'autres attributs pour cacher les publicités, par exemple ##table[width="80%"] cachera les tableaux ayant un attribut width (largeur) de 80%. Si vous ne souhaitez pas spécifier la valeur entière de l'attribut, ##div[title*="adv"] cachera tous les éléments div avec un attribut title (titre) contenant la suite de caractères "adv". Vous pouvez également vérifier le début et la fin d'un attribut, par exemple ##div[title^="adv"][title$="ert"] cachera les éléments div dont l'attribut title commence par "adv" et se termine par "ert". Comme vous le constatez, vous pouvez également utiliser plusieurs conditions — table[width="80%"][bgcolor="white"] correspondra aux tableaux dont l'attribut width est fixé à 80% et l'attribut bgcolor défini à white (couleur blanche).
Sélecteurs avancés
En général, tout sélecteur CSS pris en charge par Firefox pourra être utilisé pour le masquage d'élément. Par exemple la règle suivante masquera tout ce qui suit un élément div avec pour classe "adheader": ##div.adheader + *. Pour obtenir une liste complète CSS rendez-vous sur la page de la spécification W3C CSS (veuillez prendre note que tous les sélecteurs ne sont pas encore pris en charge par Firefox).
Remarque: Cette fonctionnalité n'est prévue que pour les utilisateurs chevronnés, il faut que vous soyez à l'aise avec les sélecteurs CSS pour l'utiliser. Adblock Plus ne pourra pas vérifier la syntaxe du sélecteur que vous ajoutez, si vous utilisez une syntaxe CSS invalide vous risquez d'endommager d'autres règles (valides) que vous avez. Vérifiez la console Javascript pour détecter d'éventuelles erreurs CSS.
Règles d'exception
Les règles d'exception permettent de désactiver un filtre existant sur certains domaines. Cela est surtout utile pour les gestionnaires de listes complémentaires qui viennent étendre l'action de listes de filtres qu'ils ne peuvent modifier. Par exemple, le filtre ##div.textad peut être désactivé sur example.com grâce à la règle d'exception
example.com#@#div.textad seule. La combinaison de ces deux règles a exactement le même effet que la règle
~example.com##div.textad seule. L'utilisation des règles d'exception est recommandée uniquement lorsque vous ne pouvez pas modifier une règle de masquage d'élément prédominante ; il est sinon préférable de limiter cette règle aux domaines qui le nécessite.
Syntaxe simplifiée pour masquage d'élément
Adblock Plus prend en charge une syntaxe simplifiée pour le masquage d'élément (ex. #div(id=foo)) pour une compatibilité rétrograde uniquement. L'utilisation de cette syntaxe est déconseillée, les sélecteurs CSS usuels sont préférés. L'aide concernant cette syntaxe sera probablement abandonnée à un moment.