Skip to content

Commit

Permalink
Workaround for IE <=9 where download was not working
Browse files Browse the repository at this point in the history
  • Loading branch information
hhurz committed Dec 19, 2015
1 parent 10a603a commit 3062c62
Show file tree
Hide file tree
Showing 3 changed files with 149 additions and 75 deletions.
131 changes: 88 additions & 43 deletions tableExport.js
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,8 @@
}
catch (e) {
downloadFile(defaults.fileName + '.' + defaults.type,
'data:text/' + (defaults.type == 'csv' ? 'csv' : 'plain') + ';charset=utf-8,' + encodeURIComponent(csvData));
'data:text/' + (defaults.type == 'csv' ? 'csv' : 'plain') + ';charset=utf-8,' + ((defaults.type == 'csv' && defaults.csvUseBOM)? '\ufeff' : ''),
csvData);
}

} else if (defaults.type == 'sql') {
Expand Down Expand Up @@ -170,18 +171,20 @@
if (defaults.consoleLog === true)
console.log(tdData);

if (defaults.outputMode == 'string')
if (defaults.outputMode === 'string')
return tdData;

if (defaults.outputMode == 'base64')
if (defaults.outputMode === 'base64')
return base64encode(tdData);

try {
var blob = new Blob([tdData], {type: "text/plain;charset=utf-8"});
saveAs(blob, defaults.fileName + '.sql');
}
catch (e) {
downloadFile(defaults.fileName + '.sql', 'data:application/sql;charset=utf-8,' + encodeURIComponent(tdData));
downloadFile(defaults.fileName + '.sql',
'data:application/sql;charset=utf-8,',
tdData);
}

} else if (defaults.type == 'json') {
Expand Down Expand Up @@ -222,20 +225,20 @@
if (defaults.consoleLog === true)
console.log(sdata);

if (defaults.outputMode == 'string')
if (defaults.outputMode === 'string')
return sdata;

var base64data = base64encode(sdata);

if (defaults.outputMode == 'base64')
return base64data;
if (defaults.outputMode === 'base64')
return base64encode(sdata);

try {
var blob = new Blob([sdata], {type: "application/json;charset=utf-8"});
saveAs(blob, defaults.fileName + '.json');
}
catch (e) {
downloadFile(defaults.fileName + '.json', 'data:application/json;charset=utf-8;base64,' + base64data);
downloadFile(defaults.fileName + '.json',
'data:application/json;charset=utf-8;base64,',
sdata);
}

} else if (defaults.type === 'xml') {
Expand Down Expand Up @@ -280,20 +283,20 @@
if (defaults.consoleLog === true)
console.log(xml);

if (defaults.outputMode == 'string')
if (defaults.outputMode === 'string')
return xml;

var base64data = base64encode(xml);

if (defaults.outputMode == 'base64')
return base64data;
if (defaults.outputMode === 'base64')
return base64encode(xml);

try {
var blob = new Blob([xml], {type: "application/xml;charset=utf-8"});
saveAs(blob, defaults.fileName + '.xml');
}
catch (e) {
downloadFile(defaults.fileName + '.xml', 'data:application/xml;charset=utf-8;base64,' + base64data);
downloadFile(defaults.fileName + '.xml',
'data:application/xml;charset=utf-8;base64,',
xml);
}

} else if (defaults.type == 'excel' || defaults.type == 'xls' || defaults.type == 'word' || defaults.type == 'doc') {
Expand Down Expand Up @@ -391,20 +394,23 @@
docFile += "</body>";
docFile += "</html>";

if (defaults.outputMode == 'string')
return docFile;
if (defaults.consoleLog === true)
console.log(docFile);

var base64data = base64encode(docFile);
if (defaults.outputMode === 'string')
return docFile;

if (defaults.outputMode === 'base64')
return base64data;
return base64encode(docFile);

try {
var blob = new Blob([docFile], {type: 'application/vnd.ms-' + defaults.type});
saveAs(blob, defaults.fileName + '.' + MSDocExt);
}
catch (e) {
downloadFile(defaults.fileName + '.' + MSDocExt, 'data:application/vnd.ms-' + MSDocType + ';base64,' + base64data);
downloadFile(defaults.fileName + '.' + MSDocExt,
'data:application/vnd.ms-' + MSDocType + ';base64,',
docFile);
}

} else if (defaults.type == 'png') {
Expand All @@ -423,12 +429,23 @@
for (var i = 0; i < byteString.length; i++)
intArray[i] = byteString.charCodeAt(i);

if (defaults.consoleLog === true)
console.log(byteString);

if (defaults.outputMode === 'string')
return byteString;

if (defaults.outputMode === 'base64')
return base64encode(image);

try {
var blob = new Blob([buffer], {type: "image/png"});
saveAs(blob, defaults.fileName + '.png');
}
catch (e) {
downloadFile(defaults.fileName + '.png', 'data:image/png;base64,' + image);
downloadFile(defaults.fileName + '.png',
'data:image/png;base64,',
image);
}
}
});
Expand Down Expand Up @@ -749,18 +766,20 @@
if (defaults.consoleLog === true)
console.log(doc.output());

if (defaults.outputMode == 'string')
if (defaults.outputMode === 'string')
return doc.output();

if (defaults.outputMode == 'base64')
if (defaults.outputMode === 'base64')
return base64encode(doc.output());

try {
var blob = doc.output('blob');
saveAs(blob, defaults.fileName + '.pdf');
}
catch (e) {
downloadFile(defaults.fileName + '.pdf', 'data:application/pdf;base64,' + base64encode(doc.output()));
downloadFile(defaults.fileName + '.pdf',
'data:application/pdf;base64,',
doc.output());
}
}

Expand Down Expand Up @@ -991,29 +1010,55 @@
return 0;
}

function downloadFile(filename, data) {
var DownloadLink = document.createElement('a');
function downloadFile(filename, header, data) {

var ua = window.navigator.userAgent;
if (ua.indexOf("MSIE ") > 0 || !!ua.match(/Trident.*rv\:11\./)) {
// Internet Explorer (<= 9) workaround by Darryl (https://github.com/dawiong/tableExport.jquery.plugin)
// based on sampopes answer on http://stackoverflow.com/questions/22317951
// ! Not working for json and pdf format !
var frame = document.createElement("iframe");

if (frame) {
document.body.appendChild(frame);
frame.setAttribute("style", "display:none");
frame.contentDocument.open("txt/html", "replace");
frame.contentDocument.write(data);
frame.contentDocument.close();
frame.focus();

frame.contentDocument.execCommand("SaveAs", true, filename);
document.body.removeChild(frame);
}
}
else {
var DownloadLink = document.createElement('a');

if (DownloadLink) {
DownloadLink.style.display = 'none';
DownloadLink.download = filename;

if (DownloadLink) {
DownloadLink.style.display = 'none';
DownloadLink.download = filename;
DownloadLink.href = data;
if (header.toLowerCase().indexOf("base64,") >= 0)
DownloadLink.href = header + base64encode(data);
else
DownloadLink.href = encodeURIComponent(header + data);

document.body.appendChild(DownloadLink);
document.body.appendChild(DownloadLink);

if (document.createEvent) {
if (DownloadEvt == null)
DownloadEvt = document.createEvent('MouseEvents');
if (document.createEvent) {
if (DownloadEvt == null)
DownloadEvt = document.createEvent('MouseEvents');

DownloadEvt.initEvent('click', true, false);
DownloadLink.dispatchEvent(DownloadEvt);
}
else if (document.createEventObject)
DownloadLink.fireEvent('onclick');
else if (typeof DownloadLink.onclick == 'function')
DownloadLink.onclick();
DownloadEvt.initEvent('click', true, false);
DownloadLink.dispatchEvent(DownloadEvt);
}
else if (document.createEventObject)
DownloadLink.fireEvent('onclick');
else if (typeof DownloadLink.onclick == 'function')
DownloadLink.onclick();

document.body.removeChild(DownloadLink);
document.body.removeChild(DownloadLink);
}
}
}

Expand Down
Loading

0 comments on commit 3062c62

Please sign in to comment.