2012-05-08 22 views
4

私はアプリケーションでlocalStorageを使用しています。IE9 localStorageに特定のUnicode文字を格納すると無効な引数エラーが発生する

私はXORビットシフト演算を使用して、データが格納される前にマスクします。ここで

は、マスキング機能である:私はマスクするとき、私はこのケースで使用しているキーの値が「MWZ2cyt2N3JwejhxUjA2V3ptRmwxcmVvU09IbFhORHdOcDRiWGh5SGRZMFU4Ym9VY1Y1WXU5c2d6OXhBdU9wTSt1MlpqcmhXOVBRPQ0K」
encrypt: function (str) { 
     var encoded = []; 

     if (!App.crypto.key) { 
      App.crypto.init(); 
     } 

     for (var i = 0, len = str.length; i < len; i++) { 
      var a = str.charCodeAt(i); 
      var b = a^App.crypto.key.charCodeAt(App.crypto.key % i); 
      encoded.push(String.fromCharCode(b)); 
     } 

     return encoded.join(""); 
    } 

ある

「[]」IE9に私はいくつかの変人を取得します文字。私が試してlocalStorageに設定しようとすると、無効な引数エラーが返されます。誰が何が起こっているのか分かっていますか?

答えて

6

IE(およびこれはまだ書き換えられていないので、Edgeはまだ書き換えられていません)XMLとしてlocalStorageを保存し、Char production in XML 1.0と一致しない文字は許可しません。つまり、「代理ブロック、FFFE、およびFFFFを除くすべてのUnicode文字」を格納できます。

これはバグです:このバグはIE8以来存在していましたが、localStorageに格納できるものに制限はありません(ECMAScript文字列は可能でなければなりません)。 (IE8のプレビューでは、XMLファイルを解析しようとしたときに解析できない文字が格納されているため、localStorageのバッキングストアが破損する可能性がありました!)

+0

Aargh。 IEは愚かです。 – Adam

関連する問題