Bonjour à tous.
Soit j'oublie quelque chose d'énorme, soit IE prouve une fois de plus son originalité. Soit une classe HArray dérivée de Array :
1 - code minimaliste pour HArray :
où g_dbg est une instance (variable globale) d'une classe utilitaire qui enregistre les traces, comme le nom de la méthode l'indique, et les restitue ensuite sur demande. Rien de spécial donc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 HArray.prototype = new Array(); // @in src = argument facultatif spécifiant un tableau à copier function HArray(src) { if( !!src ) this.copy(src); } HArray.prototype.copy = HArray_copy; // @in src = tableau à copier function HArray_copy(src) { g_dbg.addTrace("-------> HArray_copy : src.length = " + src.length) this.splice(0); if( !!src ) for( var i = 0; i < src.length; ++ i ) this.push(src[i]); g_dbg.addTrace("-------> HArray_copy : this.length = " + this.length) }
2 - code de test :
out prend un pointeur encapsulé sur le div 'HArray_TestIE', on initialise un HArray et on écrit les traces dans le div.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <h1>Vérif IE</h1> <script language="javascript"><!-- function test1() { var out = $dyn($id('HArray_TestIE')); g_dbg.addTrace("test1"); var arr = new HArray(new Array(0, 1, 2, 3, 4, 5)); for(var i = 0; i < g_dbg.getTraces().length; ++ i ) out.setText(g_dbg.getTraces()[i], true, 'br'); } --></script> <div id="HArray_TestIE" style="background-color:#F0F0F0"></div> <button onclick="test1()">test1</button>
Résultat :
3 - traces sous Firefox et Opera conforme à mes attentes :
4 - traces sous IE7 :mardi 20 novembre 2007 12:11:25 === test1
mardi 20 novembre 2007 12:11:25 === -------> HArray_copy : src.length = 6
mardi 20 novembre 2007 12:11:25 === -------> HArray_copy : this.length = 6
mardi 20 novembre 2007 12:19:17 === test1
mardi 20 novembre 2007 12:19:17 === -------> HArray_copy : src.length = 6
mardi 20 novembre 2007 12:19:17 === -------> HArray_copy : this.length = 0
Conclusion : IE7 ne traite pas correctement Array.push() pour les classes dérivées ???? Avez-vous des éclaircissements là-dessus ou bien est-ce que je fais une grosse bêtise quelque part ? Eventuellement, avez-vous des suggestions pour un wouhorqe heurrahounde ?
Partager