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
Heu, juste parce que j'ai trouvé ce truc en cherchant sur google. Testé sur IE8.. a mon avis c'est lié a ton code. vérifie bien ton script, mais ne pas oublier le code spécifique à IE :-p
http://www.irt.org/script/1747.htm
Ca me semble quand même très gros comme bug... t'as essayé avec les fonctions de modification des attributs?
Oui, j'ai essayé un setAttribute('href' mais résultat identique !
Tetageek, on code plus comme ça de nos jours… les gros pavés illisibles de JS pour prendre en compte NS4 et IE5, c'est passé à la poubelle… IE8 est censé (dixit Microsoft) respecter la norme ECMAScript…
Yep; je me doute bien :p mais comme IE fuck ben il n'est pas près de respecter les normes sauf les siennes ;-p
Et tu ne peux pas utiliser une librairie dans ton projet ? car je fait un truc pareil changement d'url en dynamique et cela fonctionne bien sur les navs en passant par jquery par exemple.
Bah lis l'article en entier, j'y propose la solution au problème. Pas besoin d'une lib pour une action aussi simple que de modifier un href sur des a ! Par contre, des développeurs et des contrôles qualité chez Microsoft, ça ferait pas de mal…
yep, j'ai vu ta soluce, c'est du bidouillage c'est tout :p
Ajouter un commentaire
Abonnement aux commentaires
S'abonner pour recevoir les commentaires suivants par email
URL de rétrolien : http://alt-i.fr/trackback/740
Fil des commentaires de ce billet