FAQ - Options internes d'Adblock Plus

Où puis-je trouver la signification de toutes les préférences d'Adblock Plus ?

Adblock Plus utilise un certain nombre de préférences accessibles via about:config. Elles commencent toutes par extensions.adblockplus. (Cela diffère d'Adblock et Adblock Plus 0.5 qui utilisent le préfixe adblock.). Une liste plus complète avec explications détaillées peut être trouvée ici.

Comment Adblock Plus bloque-t-elle les adresses ?

Le plus gros du travail est effectué par Gecko, le moteur faisant fonctionner Firefox, Thunderbird et les autres applications de la même famille. Il permet l'utilisation de "content-policy". Une règle de contenu est tout simplement un objet JavaScript (ou C++) invoqué lorsque le navigateur doit charger quelque chose. Il peut ainsi vérifier l'adresse qui devrait être chargée et d'autres données et décider d'autoriser le chargement ou pas. Il existe bon nombre de règles de contenu intégrées (lorsque vous indiquez quels sites ne sont pas autorisés à afficher d'images dans Firefox ou Seamonkey, vous êtes en fait en train de configurer une de ces règles de contenu intégrées) et n'importe quelle extension peut en placer une dans le registre. Donc, tout ce qu'Adblock Plus a à faire est d'ajouter sa règle de contenu dans le registre.

Pour les développeurs : pour ajouter une règle de contenu au registre vous devez écrire un composant XPCOM qui devrait implémenter l'interface nsIContentPolicy. Faites en sorte, afin de s'accorder avec la méthode du module de self-registration, de placer votre composant dans la catégorie des "règles de contenu" du registre (pour cela, utilisez le gestionnaire de catégorie ). C'est tout, à présent la méthode shouldLoad de votre composant sera invoquée et vous pourrez décider si la requête spécifique devra être acceptée on non.

Comment Adblock Plus fait-elle fonctionner ses filtres et quels filtres sont les plus rapides ?

Tous les filtres sont convertis en expressions régulières en interne, même ceux qui n'ont pas été spécifiés en tant que tel. Par exemple, le filtre ad*banner.gif| sera traduit dans l'expression régulière /ad.*banner\.gif$/. Cependant, lorsqu'Adblock Plus indique une adresse devant être vérifiée à partir de tous les filtres, elle ne teste pas simplement chaque filtre l'un après l'autre — cela ralentirait inutilement votre surf.

En plus de convertir les filtres en expressions régulières, Adblock Plus essaie aussi d'en extraire des informations textuelles. Ce dont elle a besoin est une séquence unique de huit caractères (un "raccourci") qui devra se trouver dans toutes les adresses coïncidant au filtre (la longueur est arbitraire, huit semblerait être raisonnable ici). Par exemple, si vous avez un filtre |http://ad.* alors Adblock Plus aura le choix entre "http://a", "ttp://ad" et "tp://ad.", n'importe laquelle de ces séquences se trouvera toujours dans quoi que ce que le filtre bloquera. Malheureusement, trouver un raccourci pour des filtres qui n'ont pas de chaîne de huit caractères sans comporter de joker ou pour des filtres qui ont été spécifiés en utilisant des expressions régulières est impossible.

Tous les raccourcis sont placés dans une table consultable par Adblock Plus pour trouver les filtres à partir des raccourcis de manière très efficaces. Ensuite, lorsqu'une adresse spécifique doit être testée Adblock Plus vérifiera dans cette table s'il y existe des raccourcis (cela peut se faire très rapidement, le temps pris est presque indépendant du nombre de raccourcis). La chaîne de caractère sera testée à partir de l'expression régulière correspondant au filtre uniquement si un raccourci a été trouvé. Cependant, les filtres sans raccourcis devront être testés les uns après les autres, ce qui se fait lentement.

Pour résumer: quels types de filtres devraient être utilisés pour obtenir une liste de filtres rapide ? Vous devriez utiliser le moins d'expressions régulières possibles, elles sont toujours lentes. Vous devriez également vérifier qu'une séquence d'au moins 8 caractères sans joker est présente dans les filtres (cela veut dire que la séquence ne comporte pas de * par exemple), sinon, ils seront aussi lent que des expressions régulières. Mais avec des filtres qualifiant, le nombre de filtres n'a aucune importance, le temps de traitement est toujours le même. Cela signifie que si vous avez besoin de 20 filtres simples pour remplacer une expression régulière, cela lui donne quand même une signification. En parlant de cela — le deregifier est tout à fait recommandable pour ce genre d'opération.

L'algorithme de correspondance de filtres en détail [en anglais]

Comment fonctionne le masquage d'éléments ?

Les filtres de masquage d'éléments sont convertis en CSS et appliqués à toutes les pages Web que l'utilisateur visite. Un filtre tel que exemple.com#div(evil_ad) va ressembler à cela :

@-moz-document domain(example.com)
{
  div#evil_ad, div.evil_ad
  {
    display: none !important;
  }
}

@-moz-document est une extension proposée pour les CSS standards, vous pouvez apprendre davantage à ce propos dans le MDC (Mozilla Developer Center)

Les filtres qui ne sont pas restreints à un domaine le seornt aux protocoles http:// et https:// pour éviter le masquage d'éléments apparetnant à l'interface utilisateur du navigateur (il utilise le protocole chrome://). Par exemple, le filtre #div(evil_ad) sera traduit en :

@-moz-document url-prefix(http://),url-prefix(https://)
{
  div#evil_ad, div.evil_ad
  {
    display: none !important;
  }
}

Pour les développeurs : Adblock Plus utilise ici le service stylesheet. Cette interface est apparu avec le moteur Gecko 1.8 et permet d'ajouter des feuilles de styles utilisateur de manière dynamique (avant cela, vous ne pouviez modifier que le fichier userContent.css qui demandais un redémarrage du navigateur). les feuilles de style utilisateur remplaceront le code CSS de tous les sites Web, ils ont l'importance la plus élevée possible.

A quoi peut ressembler la première ligne du fichier de filtres ?

En général, la première ligne d'un fichier de filtres est simplement [Adblock]. Cependant, vous aurez peut-être constaté que des versions récentes d'Adblock Plus plaçaient un autre texte à la place. Ceci est du au fait que votre liste de filtres contient des filtres utilisant une syntaxe avancée uniquement prise en charge par les versions les plus récentes d'Adblock Plus et pas par la version originale Adblock. Voici un exemple :

(Adblock Plus 0.6.1.2 or higher required) [Adblock]

Ceci est simplement un commentaire. Adblock (et Adblock Plus également) ignorera tout ce qui se trouve avant le vrai marqueur. La version d'Adblock Plus requise n'est pas obligatoire car Adblock Plus 0.6.1.2 ne la prend pas en charge. Cependant, si vous utilisez la nouvelle syntaxe de filtres, vous obtiendrez probablement quelque chose comme ceci :

[Adblock Plus 0.7.1]

Ce type d'en-tête est pris en charge à partir de la version 0.7.1 d'Adblock Plus. Des versions plus anciennes d'Adblock Plus et Adblock ne peuvent ouvrir des fichiers commençant de cette manière. Comme pour la version actuelle, elles vérifieront et compareront le numéro de version avec leur propre numéro de version. Si le fichier requiert une version plus récente d'Adblock Plus, l'utilisateur sera informé du fait qu'il devra procéder à une mise à jour pour la prise en compte du fichier de filtres. Les abonnements chargeront les fichiers prévus pour les versions les plus récentes d'Adblock Plus mais afficheront un avertissement dans la boîte de dialogue des préférences.

Pour finir, si vous souhaitez qu'Adblock Plus soit nécessaire mais ne voulez pas spécifier de numéro de version vous pouvez faire débuter votre fichier par [Adblock Plus]. Bien entendu, encore une fois, ce fichier ne sera accepté que par Adblock Plus 0.7.1 ou supérieure.