Les frame sont à la mode ? Wikio ? Exalead ? jQuery est votre ami.

Et oui, les frames reviennent en force, je suis d’ailleurs en train de préparer un petit billet sur le sujet.

Bref, je vais aller à l’essentiel, le script pour gérer de façon élégante (à défaut d’être bien conçu, je ne suis pas un pro du Javascript) ces saletés de Frames, tout en gardant l’utilité toute relative qu’elles peuvent avoir pour vous ou les sites les générant.

Pour ça, rien de plus simple; nous allons mixer différents scripts javascripts déjà existants : un script anti frames et un petit script Jquery permettant, aisément, d’attribuer un attribut précis à vos liens, en l’occurrence, un bon vieux _top des familles.

Et sans plus attendre voici…

Le script anti-frame « je veux bien être sympa mais faut pas abuser » :

<script type="text/javascript">
	if (top != self) {
	$(document).ready(function () {
   $("a").attr("target", "_top");
});
	}
	
</script>

A coller dans le head de vos pages.

Bon, d’accord, il faut utiliser la librairie JQuery, mais au moins, en 3 lignes, c’est plié.

Pourquoi pas un simple script tueur de Frame me direz-vous ? Tout simplement, parce que dans certains cas, elles ont leur utilité : j’utilise par exemple le service Blogasty et certains utilisateurs de netvibes visualisent les sites dans la frame netvibes.

Que fait le script :

  1. En gros, il détecte si la page se trouve affichée dans une frame if (top != self)
  2. Si une frame est détectée rajoute automatiquement à tous vos liens l’attribut target="_top" qui, en gros, replace la page ouverte via le lien en pleine page $("a").attr("target", "_top"); si on clique sur un lien.

Si votre site n’est pas affiché dans une frame, le script ne se déclenche pas, donc le target=_top n’est effectif que dans le cas d’affichage dans une frame.

Comme ça, les visiteurs de passage retournent d’où il sont venus, et ceux qui veulent visiter votre site « rentrent » réellement dedans.

Ceci dit, encore plus simple, si pour vous, le javascript c’est du chinois, et que vous vous fichez comme de votre premier amstrad de la validité de votre code html vous pouvez rajouter cette simple ligne dans le head de vos pages : <base target="_top">.

Ca fait la même chose, en plus court, mais en moins « puriste » (quoi que les puristes du javascript trouveront forcément à se plaindre de mon script).

Voila, maintenant vous pouvez faire la paix avec ces méchantes Frames.

Edit : voir aussi le billet Script élégant de contournement de frame sans jQuery si vous n’utilisez pas jQuery.

Cordialement,
Aymeric Jacquet

Tags : ,

Be Sociable, Share!

24 Commentaires pour Les frame sont à la mode ? Wikio ? Exalead ? jQuery est votre ami.

  • pierre chappaz

    Le frame Wikio permet aux lecteurs de promouvoir les articles qu’ils préfèrent, et de s’abonner hyper-facilement à ton blog. Mais s’il est contre ta religion, no souci, ne te complique pas la vie: on va te l’enlèver.

    Le 29 mars 2008 à 10 h 49 min

  • Sans jQuery :

    if (top.document.location!=document.location)top.document.location = document.location;

    :)

    Le 29 mars 2008 à 9 h 58 min

  • Taratata, tu as là un simple tueur de Frame, je propose, pour ma part, une solutions beaucoup plus élégante.
    Je reconnais bien là une solution bourrine de développeur.

    Le 29 mars 2008 à 10 h 38 min

  • Pierre Chappaz : le but de ce script est justement d’avoir la double utilité, et non pas de simplement « tuer la frame ».

    En clair, sur les sites utilisant un affichage via frame pour des raisons « utiles » de votes par exemple (Wikio, Blogasty), le script ne tue pas la frame directement, elle laisse la possibilité à l’utilisateur de lire l’article, de commenter, de noter via le système du site « parent ». Par contre, dés que la personne veut aller plus loin, en lisant par exemple un autre article du blog ou un lien externe, le script fait quitter la Frame, tout simplement.

    Comme quoi, je ne suis pas à 100% anti Frames, quand elles ont une utilité potentielle.

    Le 29 mars 2008 à 10 h 55 min

  • Mince j’aurais du poster avec mon identité secrète.

    Le 29 mars 2008 à 11 h 02 min

  • Ce script est super pratique effectivement, car le plus gros défaut des frames est que l’on continu à surfer dans la frame. Excellente idée !

    Le 29 mars 2008 à 13 h 33 min

  • [Mode Super Pas Crédible ON]
    Than : si tu veux des conseils en javascript hein, tu sais à qui demander maintenant.

    Note que je me suis rabattu sur jQuery car je n’arrivais pas à finaliser mon script à base de getElementsByTagName et de setAttribute.

    [Mode Super Pas Crédible OFF]

    Xavier : Ahhh, au moins un utilisateur qui a compris l’utilité du script. Merci.

    Le 29 mars 2008 à 15 h 11 min

  • Je vois que tu nous l’a ressortie à la mode, à la mode de jQuery : très bonne idée, je ne vois pas en quoi celà gêne P. Chappaz plus haut, puisque comme tu le précises bien dans ton billet, celà n’empêche nullement d’ouvrir le site dans une frame comme celles de netvibes, wikio ou blogasty. Bon, en même temps, il n’est peut-être pas développeur et la subtilité du script lui aura peut-être échappée.

    +1 donc : http://www.css4design.com/blog/killing-me-softly-with-this-script

    Le 31 mars 2008 à 3 h 01 min

  • C’est revenu à la mode ces frames et c’est vrai que ça peut avoir une utilité mais bon la meilleure frame que je connaisse c’est la fenêtre du navigateur donc mon message pour ces services : développez des plugins pour les navigateurs !

    Le 31 mars 2008 à 3 h 56 min

  • En lisant le début du billet j’allais faire la même boulette que Than :D

    Mais en fait t’as eu une idée de génie sur ce coup là ;)

    Le 31 mars 2008 à 8 h 43 min

  • Bruno : En fait j pense que je me suis mal exprimé, et comme on voit refleurir des tonnes de scripts « tueurs de frames », j’ai l’impression que beaucoup de monde perçoit mon script comme faisant al même chose. :(

    David : chutttt, t’es en train de pourrir le sujet de mon futur article sur le sujet.

    Julien : j’ai l’impression que vous êtes nombreux dans le même cas, comme quoi les gens survolent les articles plus qu’ils ne les lisent vraiment. ;)

    Le 31 mars 2008 à 11 h 10 min

  • @Aymeric > je pense que l’incompréhension de certains est du à l’URL de ton billet : « script jquery anti frame wikio exalead » qui prête vraiment à confusion, alors que le titre du billet reflète mieux l’esprit du script.

    Le 31 mars 2008 à 16 h 10 min

  • @Aymeric Jacquet : bah zut alors déjà que je t’en ai piqué un récemment ;)

    Le 31 mars 2008 à 16 h 24 min

  • Bruno : pfff si on peut plus faire de l’optimisation d’url tranquilou maintenant.

    David : ça va, je ne suis pas rancunier. ;)

    Le 31 mars 2008 à 18 h 09 min

  • C’est dommage que le framing sans autorisation préalable ne soit pas tout simplement interdit par la lois :=)

    @bruno : Excellent le titre de ton billet :)

    Le 1 avril 2008 à 3 h 54 min

  • pierre chappaz

    Aymeric j’avais lu un peu rapidement, je n’avais pas saisi la subtilité de ton script , je pensais que c’était un « vulgaire » script anti-frame ce pourquoi je te proposais d’enlever nous mêmes le frame de ton blog pour te simplifier la vie. Mais la solution que tu proposes est plus subtile! pourquoi pas?

    Le 2 avril 2008 à 14 h 28 min

  • Pierre Chappaz : pas de problèmes, comme précisé, tu n’es pas le seul à ne pas avoir compris directement l’intérêt du script.

    D’ailleurs, une chose qui pourrait être intéressante pour Wikio, et là, les spécialistes du javascript sauront me contredire au cas où, je me demande si il n’est pas possible de manipuler le DOM directement à partir de la frame Wikio pour injecter ce code dans les sites affichés, ce qui pourrait contenter tout le monde. Mais là je m’avance un peu.

    Le 2 avril 2008 à 14 h 41 min

  • Bonsoir,
    Suite à ces discussions et pour ceux qui le souhaitent, nous enlevons les frame de leur site à leur demande. Si cela vous intéresse, contactez moi à info@wikio.fr.

    Le 3 avril 2008 à 18 h 07 min

  • ocarbone

    Le même résultat, sans javascript :

    Dans la partie HEAD de votre page, insérez <base target= »_top » /> et basta ;)

    Le tag <base target= » »> va conditionner l’attribut target de chaque lien de votre page. Ce tag fonctionne même pour ceux qui ne bénéficient pas du javascript.

    le tag <base>, une balise oubliée ? Elle reste pourtant très pratique et n’a pas d’autre équivalent HTML.

    Le 8 avril 2008 à 9 h 54 min

  • ocarbone : je m’auto cite un morceau de l’article.

    Ceci dit, encore plus simple, si pour vous, le javascript c’est du chinois, et que vous vous fichez comme de votre premier amstrad de la validité de votre code html vous pouvez rajouter cette simple ligne dans le head de vos pages : <base target= »_top »>.

    Et toc !

    Elle a été oubliée car non « valide » tout simplement, du moins en xhtml.

    Le 8 avril 2008 à 16 h 15 min

  • Killing me softly (with this script)

    Strumming my pain with his frame
    Singing my life with wordpress
    Killing me softly with his script
    Killing me softly… with his script
    Telling my whole life with wordpress
    Killing me softly… with his script…

    Avant, lorsqu’on vou…

    Le 23 avril 2008 à 20 h 16 min

  • La frame Wikio retirée ?

    Pour ma part, je ne pense pas qu’il s’agisse d’une erreur, cette frame rentrait dans un processus commercial nécessaire à l’évolution du modèle économique de Wikio, il ne s’agissait donc pas d’une erreur, mais d’un choix stratégique tout à fait

    Le 25 avril 2008 à 18 h 20 min

  • sans jquery en bas de page :
    if (top != self) {
    var i, a = document.getElementsByTagName(‘a’);
    for(i=0;i < a.length;i++) a i .target=’_top’;
    }

    Le 1 mai 2008 à 18 h 03 min

  • Ahh merci Xorax, juste dommage que la syntaxe wiki ait mangé un bout de script. :)

    Le 5 mai 2008 à 9 h 18 min