Je viens de trouver un bug sur Internet Explorer 8. Ce dernier ne sait pas modifier correctement le href d'une balise a -_-" Voici le cas pratique :
Indenté </h2> <a href="http://alt-i.fr/"> http://alt-i.fr/ </a> </p> <a href="http://www.google.com"> http://www.google.com </a> </p> Non indenté </h2> <a href="http://alt-i.fr/">http://alt-i.fr/</a> </p> <a href="http://www.google.com">http://www.google.com</a> </p> Texte différent </h2> <a href="http://alt-i.fr/">Alt-I</a> </p> <a href="http://www.google.com">Google</a> </p> <script type="text/javascript" charset="utf-8"> //<![CDATA[ (function() { var as = document.getElementsByTagName('a'); for (var i = 0; as[i]; i++) { as[i].href = 'http://www.over-blog.com'; } })(); //]]> </script>
Donc des liens dont le label est identique au href (c'est à dire que sera affiché sur la page web l'url vers laquelle il lie) et des liens avec un label différent. Un script qui prends tous les liens et modifie leur href, donc pour changer l'url vers laquelle ils lient, mais pas leur label.
Le résultat est évidemment correct sur tous les navigateurs. Par exemple Firefox :
Par contre sous IE8, c'est autre chose. Celui-ci se permet de modifier non seulement le href, mais aussi le label. Regardez :
La solution absolument ridicule est donc de mettre de coté le innerHTML avant de modifier le href, puis de le remettre correctement :
(function() { var as = document.getElementsByTagName('a'); for (var i = 0; as[i]; i++) { var label = as[i].innerHTML; as[i].href = 'http://www.over-blog.com'; as[i].innerHTML = label; } })();
Merci Microsoft.
Commentaires