2010-11-19 92 views
1

我使用下面的函數來編碼字符串到的base64:charCodeAt在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; 
} 

然而,在IE中,我得到了以下錯誤:

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

能否請你幫我解決這個問題?看來charCodeAt函數不起作用。

謝謝你的時間。

+2

哪個版本的IE? – 2010-11-19 04:59:19

+5

IE 5.5+支持'charCodeAt()'。你還支持 Alex 2010-11-19 05:00:28

回答

1

它肯定看起來像 IE支持String#charCodeAt()w3schoolsMSDN

什麼是typeof input

+0

我發現類型是「數字」,所以我添加了一個檢查,如輸入類型不是字符串,它調用toString()函數來轉換它。 – Benjamin 2010-11-22 01:46:52

0

如果你真的在< IE 5.5,則必須做到這一點:

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

會做你想要什麼。

但是,這在unicode字符上失敗,但在IE 5.4及以下的黑暗日子裏,unicode幾乎不存在。

如果您正在使用> = IE 5.5,那麼問題不在於charCodeAt(),而是與您的代碼的另一部分。什麼是input