2010-11-19 5 views
1

J'utilise la fonction suivante pour encoder des chaînes en base64:charCodeAt non pris en charge dans IE?

encode: function(input) { 
    var output = ""; 
    var chr1, chr2, chr3; 
    var enc1, enc2, enc3, enc4; 
    var i = 0; 

    do { 
     chr1 = input.charCodeAt(i++); 
     chr2 = input.charCodeAt(i++); 
     chr3 = input.charCodeAt(i++); 

     enc1 = chr1 >> 2; 
     enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); 
     enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); 
     enc4 = chr3 & 63; 

     if (isNaN(chr2)) { 
      enc3 = enc4 = 64; 
     } else if (isNaN(chr3)) { 
      enc4 = 64; 
     } 

     output = output + this.keyStr.charAt(enc1) + this.keyStr.charAt(enc2) + this.keyStr.charAt(enc3) + this.keyStr.charAt(enc4); 
    } while (i < input.length); 

    return output; 
} 

Cependant, dans IE, j'obtiens l'erreur suivante:

chr1 = input.charCodeAt(i++); 
"Object doesn't supported by this property or method". 

Pourriez-vous s'il vous plaît me aider à résoudre ce problème? Il semble que la fonction charCodeAt ne fonctionne pas.

Merci pour votre temps.

+2

Quelle version d'IE? –

+5

'charCodeAt()' est pris en charge dans IE 5.5+. Soutenez-vous toujours Alex

Répondre

1

Il semble que comme IE soutient String#charCodeAt(): w3schools et MSDN.

Qu'est-ce que typeof input?

+0

J'ai découvert que le type était "nombre" donc j'ai ajouté une vérification comme si le type d'entrée n'est pas une chaîne, il appelle la fonction toString() pour le convertir. – Benjamin

0

Si vous vraiment doit faire dans < IE 5.5, puis:

input.charAt(i++).escape() 

fera ce que vous voulez.

Cependant, cela échoue sur les caractères Unicode, mais dans les jours sombres de IE 5.4 et ci-dessous, unicode était presque inexistant.

Si vous travaillez dans> = IE 5.5, alors le problème n'est pas avec charCodeAt(), mais plutôt avec une autre partie de votre code. Qu'est-ce que input?

Questions connexes