Je viens à nouveau de tomber sur un site qui contient des liens en javascript. Sur le onclick de certains liens, un window.open est executé, et sur l'attribut href : rien, mis à part un #.

Une erreur trés courante malheureusement. Je ne rentrerai pas dans le débat trollesque sur faut-il se permettre de forcer l'ouverture d'une nouvelle fenêtre ou pas dans les pages web (Sachez quand même que je suis contre, pour plein de bonnes raisons !). Que l'on soit pour ou contre, il faut savoir qu'il y a quand même des pratiques qui rendent un tant soit peu ce genre de liens accessibles.

En effet, ces liens réalisés n'importe comment :

  • m'empêche d'ouvrir la page concernée dans un onglet ou ailleurs
  • si le javascript est désactivé, on ne peut suivre le lien (c'est le cas notamment des robots d'indexations...)

Il est pourtant simple de supprimer ces effets néfastes. Plutôt que de faire :

<a href="#" onclick="window.open('test.html')">mauvais lien</a>

Il suffit de faire :

<a href="test.html" onclick="window.open(this.href); return false;">bon lien</a>

On met donc l'URL dans l'attribut href de la balise (quoi de plus normal hein ?!). Sur le onclick, on ouvre une nouvelle fenêtre, en récupérant l'url situé dans l'attribut href (this.href). Ensuite, on retourne la valeur false pour indiquer que l'évènement "clic" ne doit plus se propager, donc qu'il ne soit plus être interpreté par le navigateur, c'est à dire, ne pas faire le traitement par défaut du clic sur une balise a qui est de suivre le lien.

Et si le javascript est désactivé, le lien s'ouvrira quand même, non plus dans une nouvelle fenêtre, mais dans la fenêtre courante (le onclick n'étant plus executé). Quel que soit le contexte, on accéde à la nouvelle page. Et on peu choisir comment on veut ouvrir la page (dans un onglet, nouvelle fenêtre etc..).