forked from sheetjs/sheetjs
IE6+ AJAX (fixes #88)
This commit is contained in:
parent
ba8bfe5b09
commit
7fee330e32
@ -18,6 +18,7 @@
|
||||
<b>JS-XLSX AJAX Demo</b><br />
|
||||
<pre id="out"></pre>
|
||||
<br />
|
||||
<script src="iemagic.js"></script>
|
||||
<script src="shim.js"></script>
|
||||
<script src="jszip.js"></script>
|
||||
<script src="xlsx.js"></script>
|
||||
@ -61,11 +62,10 @@ if(typeof Uint8Array !== 'undefined') {
|
||||
process_wb(wb);
|
||||
};
|
||||
} else {
|
||||
oReq.setRequestHeader("Accept-Charset", "x-user-defined");
|
||||
oReq.onreadystatechange = function() { if(oReq.readyState == 4 && oReq.status == 200) {
|
||||
var data = new VBArray(oReq.responseBody).toArray();
|
||||
var arr = new Array();
|
||||
for(var i = 0, len = data.length; i != len; ++i) arr[i] = String.fromCharCode(data[i]);
|
||||
var wb = XLSX.read(arr.join(""), {type:"binary"});
|
||||
var ff = convertResponseBodyToText(oReq.responseBody);
|
||||
var wb = XLSX.read(ff, {type:"binary"});
|
||||
process_wb(wb);
|
||||
} };
|
||||
}
|
||||
|
37
iemagic.js
Normal file
37
iemagic.js
Normal file
@ -0,0 +1,37 @@
|
||||
// http://stackoverflow.com/a/5913807
|
||||
|
||||
if(/msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent)) {
|
||||
var IEBinaryToArray_ByteStr_Script =
|
||||
"<!-- IEBinaryToArray_ByteStr -->\r\n"+
|
||||
"<script type='text/vbscript'>\r\n"+
|
||||
"Function IEBinaryToArray_ByteStr(Binary)\r\n"+
|
||||
" IEBinaryToArray_ByteStr = CStr(Binary)\r\n"+
|
||||
"End Function\r\n"+
|
||||
"Function IEBinaryToArray_ByteStr_Last(Binary)\r\n"+
|
||||
" Dim lastIndex\r\n"+
|
||||
" lastIndex = LenB(Binary)\r\n"+
|
||||
" if lastIndex mod 2 Then\r\n"+
|
||||
" IEBinaryToArray_ByteStr_Last = Chr( AscB( MidB( Binary, lastIndex, 1 ) ) )\r\n"+
|
||||
" Else\r\n"+
|
||||
" IEBinaryToArray_ByteStr_Last = "+'""'+"\r\n"+
|
||||
" End If\r\n"+
|
||||
"End Function\r\n"+
|
||||
"</script>\r\n";
|
||||
|
||||
// inject VBScript
|
||||
document.write(IEBinaryToArray_ByteStr_Script);
|
||||
}
|
||||
|
||||
var convertResponseBodyToText = function (binary) {
|
||||
var byteMapping = {};
|
||||
for ( var i = 0; i < 256; i++ ) {
|
||||
for ( var j = 0; j < 256; j++ ) {
|
||||
byteMapping[ String.fromCharCode( i + j * 256 ) ] =
|
||||
String.fromCharCode(i) + String.fromCharCode(j);
|
||||
}
|
||||
}
|
||||
var rawBytes = IEBinaryToArray_ByteStr(binary);
|
||||
var lastChr = IEBinaryToArray_ByteStr_Last(binary);
|
||||
return rawBytes.replace(/[\s\S]/g,
|
||||
function( match ) { return byteMapping[match]; }) + lastChr;
|
||||
};
|
Loading…
Reference in New Issue
Block a user