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 : ,