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 puis-je accéder à Adblock Plus à partir de mon extension ?
Pour permettre l’intégration d’autres extensions avec Adblock Plus, l’interface IAdblockPlus est exportée. Veuillez vous référer à la documentation sur l’interface IAdblockPlus [en] pour davantage d’informations.
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(exemple.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.
Combien de fois les listes souscrites seront-elles être téléchargées ?
La valeur par défaut est fixée de telle manière à ce que le téléchargement se fasse une fois par jour. Cependant, les auteurs de liste d’abonnement peuvent ajuster cette valeur par exemple, pour éviter une utilisation trop importante de la bande passante. Toutes les valeurs comprises entre une heure et 21 jours sont possibles. Une des méthode pour faire cela est de définir l’expiration des en-têtes HTTP. Le module Apache mod_expires vous le permet, vous ecriver simplement dans le fichier .htaccess :
ExpiresActive on ExpiresByType text/plain "access plus 5 days"
Cela fixe la date d’expiration de la liste de filtres à 5 jours après le dernier téléchargement. Si votre liste a été créée par un script Perl vous pouvez faire la même chose avec la commande suivante :
$cgi->header(-expires => "+5d");
Cela fonctionne de la même manière pour d’autres langages de script comme PHP. Si popur uen raison ou une autre vous ne pouvez modifier les en-têtes HTTP, vous pouvez placer uin commentaire dans votre liste de filtres :
[Adblock] ! This list expires after 5 days
Ce commentaire peut être placé n’importe où. Adblock Plus recherchera tout commentaire contenant le mot clé “expires after” ou “expires:” suivi d’un nombre. Le nombre est interprété par défaut comme étant un nombre de jours. Un nombre suivi d’un “h” sera interprété comme étant des heures, cela veut dire que “Expires: 3h” ou “expires after 3 hours” demandera à Adblock Plus de télécharger à nouveau la liste après 3 heures.
Veuillez prendre note que cela n’est que le temps mimimum entre deux téléchargements. Si l’utilisateur n’a pas lancé son navigateur entre temps, la liste ne sera téléchargée qu’au moment où l’utilisateur relancera son navigateur.
Mon abonnement a été déplacé, comment puis-je m’assurer que tout le monde obtienne la nouvelle adresse ?
À partir d’Adblock Plus 0.7.5 les redirections permanentes sont prises en charge. Cela signifie qu’il n’y a pas que l’abonnement qui sera téléchargé à partir du nouvel emplacement, mais les adresses d’abonnement changeront également dans Adblock Plus afin que les téléchargement se fasse immédiatement à partir de ces nouvelles adresses. Comment utiliser cette fonctionnalité ?
Première option : rediriger avec des en-têtes HTTP. S’il y a requête pour une ancienne adresse de liste de filtres, une réponse d’erreur “301 Moved Permanently” devrait s’afficher. Adblock Plus suivra la redirection et ajustera l’adresse d’abonnement correctement. Vous pouvez créer une telle redirection avec le module Apache mod_alias, ajoutez à votre fichier .htaccess quelque chose comme les lignes suivantes :
Redirect permanent /ancienne_liste.txt http://exemple.com/nouvelle_liste.txt
Si vous ne pouvez créer de redirection HTTP sur votre hébergement vous pouvez utiliser un commentaire spécial afin de spécifier la nouvelle adresse de votre abonnement. Cela devrait ressembler à ça :
[Adblock] ! Redirect: http://exemple.com/nouvelle_liste.txt
Ce commentaire peut être placé n’importe où dans votre liste de filtre, Adblock Plus recherchera tous les commentaires comportant le mot-clé “redirect:” et “redirect to” suivi d’une adresse. Si un tel commentaire est trouvé, une nouvelle mise à jour d’abonnement sera initiée après une heure avec la nouvelle adresse. Si cette nouvelle mise à jour s’achève avec succès, l’adresse d’abonnement sera ajustée.
Enfin, il peut arriver que votre serveur soit indisponible et vos utilisateurs obtiendront un message d’erreur à chaque tentative de mise à jour. Même si vous ne pouvez vous prémunir de cette erreur, il existe une solution. Après un certain nombre de tentatives de mise à jour échouées (déterminées par l’option de préférences extensions. adblockplus. subscriptions_fallbackerrors ), Adblock Plus contactera l’adresse définie dans l’option des préférences extensions. adblockplus. subscriptions_fallbackurl pour des instructions complémentaires. Si le problème est connu, cette adresse fournira le nouvel emplacement de votre liste de filtres. Si vous n’arrivez pas à indiquer un changement de localisation de votre abonnement de manière ordinaire, veuillez m’en informer.
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.
[untr]How do I protect my filter subscription against accidental download corruption?[/untr]
Proxy servers as well as antivirus and firewall software might modify downloads. Sometimes a filter “*/example/*” mutates into “**” because of that and causes everything to be blocked. To prevent this subscription maintainers can insert a checksum towards the start of the filter list, like this:
[Adblock] ! Checksum: OaopkIiiAl77sSHk/VAWDA test
Adblock Plus will ignore the download if the checksum doesn’t match the contents of the file. When exporting filters from Adblock Plus the checksum will be generated automatically. It is calculated as follows:
- Take UTF-8 encoded text of the filter list (including the first line)
- Convert all line breaks to UNIX style (remove \r characters if present)
- Remove empty lines (replace sequences of multiple \n characters by a single \n character)
- Remove existing checksum comment
- Calculate a base64-encoded MD5 checksum of the text, remove trailing = characters if any
The Perl code to achieve this looks like this (assuming that the file encoding is UTF-8):
use Digest::MD5 qw(md5_base64); my $data = readFile($file); # Normalize data $data =~ s/\r//g; $data =~ s/\n+/\n/g; # Remove existing checksum $data =~ s/^\s*!\s*checksum[\s\-:]+[\w\+\/=]+.*\n//mi; # Calculate new checksum my $checksum = md5_base64($data);
Reference implementations exists to validate a checksum and to add a checksum to a file.
PHP code for checksum calculation (again assuming that the file encoding is UTF-8):
$data = file_get_contents($file);
# Normalize data
$data = preg_replace('/\r/', '', $data);
$data = preg_replace('/\n+/', "\n", $data);
# Remove existing checksum
$data = preg_replace('/^\s*!\s*checksum[\s\-:]+([\w\+\/=]+).*\n/mi', '', $data);
# Calculate new checksum
$checksum = base64_encode(pack('H*', md5($data)));
$checksum = preg_replace('/=+$/', '', $checksum);
