<script type="text/javascript">
var showSave;
var
DownloadAttributeSupport = 'download' in document.createElement('a');
navigator.saveBlob = navigator.saveBlob || navigator.msSaveBlob ||
navigator.mozSaveBlob || navigator.webkitSaveBlob;
var
BrowserSupportedMimeTypes = {
"image/jpeg": true,
"image/png": true,
"image/gif": true,
"image/svg+xml": true,
"image/bmp": true,
"image/x-windows-bmp": true,
"image/webp": true,
"audio/wav": true,
"audio/mpeg": true,
"audio/webm": true,
"audio/ogg": true,
"video/mpeg": true,
"video/webm": true,
"video/ogg": true,
"text/plain": true,
"text/html": true,
"text/xml": true,
"application/xhtml+xml": true,
"application/json": true
};
if (Blob &&
navigator.saveBlob) {
showSave = function
(data, name, mimetype) {
// var builder = new Blob(data);
var blob = new Blob([data], { type: 'text/css' });
//builder.append(data);
// var blob = builder.getBlob(mimetype ||
"application/octet-stream");
if (!name) name = "Download.bin";
if (window.saveAs) {
window.saveAs(blob, name);
}
else {
navigator.saveBlob(blob, name);
}
};
}
else if (Blob && URL) {
showSave = function
(data, name, mimetype) {
//var blob, url, builder = new
Blob(data);
var url, blob = new Blob([data], { type: 'text/css' });
//builder.append(data);
if (!mimetype)
mimetype = "application/octet-stream";
if
(DownloadAttributeSupport) {
// blob = builder.getBlob(mimetype);
url = URL.createObjectURL(blob);
var link =
document.createElement("a");
link.setAttribute("href",url);
link.setAttribute("download",name||"Download.bin");
var event =
document.createEvent('MouseEvents');
event.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
link.dispatchEvent(event);
}
else {
if
(BrowserSupportedMimeTypes[mimetype.split(";")[0]] === true) {
mimetype = "application/octet-stream";
}
//blob = builder.getBlob(mimetype);
url = URL.createObjectURL(blob);
window.open(url, '_blank', '');
}
setTimeout(function
() {
URL.revokeObjectURL(url);
}, 250);
};
}
else if (!/\bMSIE\b/.test(navigator.userAgent))
{
showSave = function
(data, name, mimetype) {
if (!mimetype)
mimetype = "application/octet-stream";
// Again I need to filter the mime type
so a download is forced.
if
(BrowserSupportedMimeTypes[mimetype.split(";")[0]] === true) {
mimetype = "application/octet-stream";
}
window.open("data:" + mimetype + "," + encodeURIComponent(data), '_blank', '');
};
}
function
saveData() {
if (!showSave) {
alert("Your browser does not support any
method of saving JavaScript gnerated data to files.");
return;
}
showSave(
document.getElementById("data").value,
document.getElementById("filename").value,
document.getElementById("mimetype").value);
}
</script>
</head>
<body>
<label for="filename">File name:</label>
<input type="text" id="filename" value="Example.html"/>
<label for="mimetype">Mime type:</label>
<input type="text" id="mimetype" value="text/plain;
charset=UTF-8"/>
<label for="data">File contents:</label>
<textarea id="data">Multiline text containing unicode characters.
Welcome...
</textarea>
<button onclick="saveData();">Save Data</button>