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

Signaler
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
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

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
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 />
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
À 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 ...
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
>>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 />