Testez le code suivant (démo) dans les navigateurs IE6, IE7, Firefox2 +, Firefpx3 +, Opera9.6 +, Safari3.1 +:
<div id = test>
<a href = #> test </a>
</div>
<div id = résultat> </div>
<script type = text / javascript>
(fonction(){
var test = document.getElementById ('test');
alert (test.innerhtml);
var result = document.getElementById ('result');
résultat.innerhtml = test.innerhtml;
alerte (result.innerhtml)
}) ();
</cript>
En conséquence, il sera constaté que la valeur HREF de l'élément A Résultat. INNERHTML est apparu pour la deuxième fois dans les navigateurs IE6 et IE7 devient le chemin absolu.
En fait, nos ancêtres ont rencontré ces problèmes il y a longtemps (grâce à Yu Bo pour les informations fournies):
La solution de traitement a été mentionnée dans l'article ci-dessus, qui consiste à utiliser la méthode GetAttribute ('HREF', 2) sous IE. Microsoft étend le deuxième paramètre à cette méthode, qui peut être définie sur 0, 1, 2, et si elle est définie sur 2, la valeur d'origine de la propriété est renvoyée.
Le script est corrigé à:
(fonction(){
var test = document.getElementById ('test');
alert (test.innerhtml);
var result = document.getElementById ('result');
résultat.innerhtml = test.innerhtml;
if (/ * @ cc_on! @ * / 0) {// if ie
var links1 = test.getElementsByTagName ('a');
var links2 = result.getElementsByTagName ('a');
pour (var i = 0, len = links1.length; i <len; ++ i) {
links2 [i] .href = links1 [i] .getAttribute ('href', 2);
}
}
alert (result.innerhtml);
}) ();
Dans le processus de recherche de ce problème, j'ai également recherché un bogue intéressant trouvé par Hedger Wang: lorsque la nouvelle valeur d'attribut HREF est réinitialisée dans IE, si le texte de lien contient http: // ou @, son innerhtml s'affiche incorrectement et sera affiché comme l'attribut SET HREF.
Solution (Shref est la nouvelle valeur de HREF à définir):
shref = 'http://www.hedgerwow.com';
var ismsie = / * @ cc_on! @ * / false;
if (ismsie) {
shref = '' + shref; // Ajouter un espace supplémentaire avant le nouveau HREF
};
Détails: "Internet Explorer peut réinitialiser l'interhtml d'Anchor à tort lorsqu'un nouveau HREF est attribué"