Opéra n'est plus le roi du web ?

Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 - 6 août 2007 à 23:16
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 8 août 2007 à 09:32
De tous les bugs que j'ai eu en javascript celui-ci est de loin le plus étrange que j'ai eu ... d'autant plus qu'il ne se passait que sur Opéra.

var statusT xml.getElementsByTagName("status")[0].firstChild.data; // statusT 200

alert (statusT); // Ceci alert 200 //
alert (statusT == 200); // Ceci alert true //
alert (isNaN(statusT)); // Ceci alert false //

switch (statusT)
{
case 200 : alert(".."); startChat(); break; // Apparament même si statusT == 200, il n'exécute pas cette ligne
case 400 : Warning (message); break;
default : alert(statusT); break; // Ceci alert 200 ... O_o
}

Et j'ai pourtant essayé de trouver où était le bug avec Opéra. En changant le case 200 par case "200", var statusT ... par var statusT parseInt(...), mais le bug persistait.

Pour le problème je n'ai fait que le contourner en utilisant des if au lieu du switch. Quelqu'un a déjà eu un problème aussi incompréhensible que ça ?

3 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
7 août 2007 à 09:49
Bonjour,

    à priori, ça ne vient pas du switch/case

    var c=5;
    switch (c)
    {    case 1:  alert(1);          break;
         case 5:  alert(5);          break;           
         case 10: alert(10);         break;   
         default: alert("autre:"+c);

break;
    }


     ça baigne.

     alors (?) c'est du au "contenu" de xml.getElementsByTagName("status")[0].firstChild.data;
     ( pas tout à fait puisque les IF fonctionnent !?! )

       essayer switch ( Number(statusT) )
                     switch ( parseInt(statusT,10) )
                      ...

<hr />
Cordialement                Bul         [mon Site]     [M'écrire]
<hr />
0
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
7 août 2007 à 23:58
À priori statusT est un nombre puisse que isNaN(statusT) donne False. Donc si statusT == 200 et que c'est un nombre je vois pas quoi d'autre que le chiffre 200 que statusT contient.

J'ai essayé ce que tu m'a proposé avec "switch (Number(statusT))" ça fonctionne et avec "switch (statusT)" ça donne le "problème" bizarre.

Je trouve ça tout de même bizarre que supposant ceci :

statusT == 200
isNaN(statusT) == false

Que :

Dans le switch statusT != 200

C'est probablement à cause de la façon donc Opéra gère les valeurs retournés par xml/ajax. Dommage qu'un aussi bon navigateur est autant de problème à effectuer quelque chose d'aussi simple qu'un switch ...
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
8 août 2007 à 09:32
>>avec "switch (Number(statusT))" ça fonctionne et avec "switch (statusT)" ça donne le "problème"
    peut-être un ch'tit bug dans Opera ?   ça y ressemble en tous cas...
           si tu es sûr de ce que tu dis.
    faudrait le signaler à leur service technique/développement ?

>> Dommage qu'un aussi bon navigateur
    quelques soucis CodesSources/Opera, mais...

            c'est vrai qu'il est "plutôt plus que bien", véloce et tout...




<hr />



Cordialement                Bul     [mon Site]     [M'écrire]



<hr />
0
Rejoignez-nous