Ma vie rêvée

Aller au contenu | Aller au menu | Aller à la recherche

Blocage de pub, bis repetita

Dans ce billet, je vous faisait part de mes recherches pour bloquer les cadres de pub lycos avec quelques préférences de mozilla et firefox. Et bien je vous annonce que moyennant une toute petite modification, il est possible de bloquer également les pubs sur ifrance et sur les autres sites lycos (en + de lycos.fr).

Voilà le code à placer dans user.js :

user_pref("capability.policy.policynames", "lycos");
user_pref("capability.policy.lycos.sites", "http://membres.lycos.fr http://www.ifrance.com http://members.lycos.co.uk");
user_pref("capability.policy.lycos.Window.top", "noAccess");

Pour ajouter un site, il suffit de rentrer le domaine à la suite des précédent, sans barre oblique à la fin de l'URL et avec un espace entre les url.

Petite explication du fonctionnement : Pour afficher leurs cadres, ces sites utilisent une méthode assez crades qui consiste à injecter des morceaux de codes javascript dans les pages web au moment où elles sont récupérées par les navigateurs. Si vous regardez la source des pages perso sur ces sites, vous verrez un gros pavé de javascript qui se situe avant la déclaration de la page HTML, ce qui a pour effet secondaire de flinguer la validation W3C.
Ce javascript est donc ensuite éxécuté par la navigateur de l'internaute. Il appelle alors plusieurs fonction pour :

  1. vérifier qu'il est bien dans la bonne fenêtre,
  2. modifier la page en cours pour y insérer un cadre
  3. remplir ce cadre avec une pub

Si vous avez suivi, vous aurez noté qu'en interdisant le javascript sur ces sites, cela suffit à désactiver le cadre de pub (mais pas à retirer le code pourri qu'ils injectent :( ). C'est sur, ça marche mais c'est un peu violent. Pour faire plus dans la finesse, la méthode que je vous propose au dessus se contente d'interdire l'utilisation d'une seule fonction javascript : la fonction window.top. Celle ci permet en fait au script injecté de se positionner dans la fenêtre la plus élevée (dans le cas où il y aurait des cadres dans le site, cela permet de se placer dans le cadre englobant tout). en bloquant cette fonction, on lui interdit de savoir où il est et le script échoue : le cadre n'est pas affiché !

Le principal problème avec cette méthode, c'est le risque de bloquer une fonction utile. Il doit surement exister des site qui posent problème avec ce blocage mais pour l'instant, je n'en ai pas trouvé.

Commentaires

1. Le dimanche 14 novembre 2004, 18:20 par NeoY2k

Bieeeeeeeen :) Merci :)

2. Le jeudi 16 décembre 2004, 23:01 par NicolBolas

Pas mal comme methode, ça m'a permis de decouvrir à quel point on pêut interferer avec le comportement de mozilla/firefox :D
Par contre, serait il possible de filtrer le contenu lors de son chargement? C.A.D. avec un patern de plusieurs ligne pour identifier et supprimer le code javascript avant le rendu de la page? Ce serais peut etre meme plus simple d'effacer tout ce qui se trouve en dehors de <html> et </html> à la rigueur... Il me semble que AdBlock utilise ce genre de technique (un sed sur le code avant rendu quoi)... On pourrait l'etendre, non?
Bon comme toi je ne suis pas codeur et je n'ai pas d'affinité avec (emacs|vi|kdevelop) donc vous pourrez toujours chercher mon patch, mais ça pourrait etre une piste a soumettre au developpeur d'adblock ;)

3. Le mardi 2 août 2005, 08:53 par snoopy_basic

Salut.
Merci pour ce code qui fait bien son boulot.
Cela dit, j'ai eu un souci que j'ai réussi à régler.
Une fois user.js modifié, je me précipite sur lycos.fr pour voir le résultat, et ô étonnement, la page ne ressemblent plus à rien, les cadres sont découpés, une partie de la page est blanche et cette même page est toute en hauteur, du au découpage des cadres...;/ Je me gratte la tête en essayant diverses choses dont la 1ère est de restaurer le fichier modifié, mais en vain. Je tente en autorisant les cookies, mais rien. Du coup je recolle ton code, et je teste au cas où d'interdire le javascript sur cette page, et là, étrangement, *pouf, le problème est résolu.
Du coup, je suis bien soulagé :) mais je me gratte encore la tête :\ pour éssayer de comprendre; seulement voilà, je ne suis bon quà recopier les codes que des personnes comme toi ont la gentillesse de partager avec des gens comme moi.
Pourrais-tu tenter de m'expliquer ce qui c'est passé ?
Merci.