4

アプリケーションで localStorage を使用しています。

ストレージに入る前にデータをマスクするために、XOR ビットシフト操作を使用しています。

マスキング機能は次のとおりです。

    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("");
    }

この場合に使用しているキーの値は、「MWZ2cyt2N3JwejhxUjA2V3ptRmwxcmVvU09IbFhORHdOcDRiWGh5SGRZMFU4Ym9VY1Y1WXU5c2d6OXhBdU9wTSt1MlpqcmhXOVBRPQ0K」です。

IE9 で "[]" をマスクすると、奇妙な文字が表示されます。それを localStorage に設定しようとすると、無効な引数エラーが発生します。何が起こっているのか知っている人はいますか?

4

1 に答える 1

7

IE (および Edge、これはまだ書き直されていないため) は localStorage を XML として保存し、XML 1.0 の Char 生成に一致しない文字を許可しません。つまり、「サロゲート ブロック、FFFE、および FFFF を除く、任意の Unicode 文字」を格納できます。

仕様によると、これはバグです。このバグは IE8 から存在していましたが、localStorage に保存できるものに制限はありません (任意の ECMAScript 文字列が可能である必要があります)。(IE8 プレビューでは、許可されていない文字の 1 つを格納することにより、localStorage バッキング ストアを破損することができました。XML ファイルを解析しようとしたときに解析エラーが発生したためです!)

于 2012-05-08T19:16:22.473 に答える