Chrome と IE9 の 2 つのブラウザでjDataViewを使用してバイナリを読み込もうとしています。
ajaxリクエストの前に新しいタイプを追加しましたbinary
(jQuery 1.10.0を使用):
// Install binary dataType
jQuery.ajaxSetup({
accepts: {
binary: "text/plain; charset=x-user-defined"
},
contents: {
},
converters: {
"text binary": true // Nothing to convert
}
});
バイナリ ストリームを返すサーバー用に、次のヘッダーを追加しました。
<?php header("Content-type: text/html; charset=windows-1251"); ?>
次に、ajax リクエスト:
$.support.cors = true;
$.ajax({
type: 'GET',
url: url,
dataType: 'binary',
mimeType: 'text/plain; charset=x-user-defined',
success: function(data) {
var view = new jDataView(data);
// ...
}
});
メソッドgetUint8()
を使用して、バイナリ ストリームの一部を取得しています。
for (var l = 0; l < 8; l++) {
tx += " " + view.getUint8(l, true);
}
tx
次に、文字列を比較します。
0 0 0 7 12 106 212 65 (chrome) => GOOD (match the expected results)
0 0 2 94 12 106 36 65 (IE9) => 3 BAD sequences
Chrome では問題なく動作しますが、IE9 では同じ結果にはなりません... Chrome はネイティブgetUint8
関数を使用していますが、IE9 は jDataView メソッドを使用しています。