バイナリ データをサーバーに投稿しようとしています。これは、Chrome 15 で必要なとおりに機能します。
XMLHttpRequest.prototype.sendAsBinary = function(datastr) {
function byteValue(x) {
return x.charCodeAt(0) & 0xff;
}
var ords = Array.prototype.map.call(datastr, byteValue);
var ui8a = new Int8Array(ords);
this.send(ui8a.buffer);
};
ただし、Int8Array タイプ (または Blob) をサポートしていない特定のブラウザーで動作させるには、これが必要です。
おそらく解決策は、ArrayBuffer の独自の実装を作成することです (ui8a.buffer は ArrayBuffer です)。問題は、このオブジェクトが何であるかわからないことです。JavaScript コンソールで調べると、byteLength プロパティのみが表示されます。
更新: 近づいているように感じますが、変換が正しくありません。これが私が試していることです:
XMLHttpRequest.prototype.sendAsBinary = function(datastr) {
var blob;
function byteValue(x) {
return x.charCodeAt(0) & 0xff;
}
var ords = Array.prototype.map.call(datastr, byteValue);
if (window.Int8Array) {
var ui8a = new Int8Array(ords);
blob = ui8a.buffer;
} else {
var strArray = Array.prototype.map.call(ords, function(x) {
if (x > 127) x = x-256;
return String.fromCharCode(x);
});
blob = strArray.join();
}
this.send(blob);
};
私のブロブは、本来あるべき長さの 2 倍になってしまいます。これは、一度に 2 バイトをエンコードするというあなたの言及を示唆しています。しかし、私はそれを行う方法が本当にわかりません(まだ)...