javascript - filename - Enlaces abiertos creados por createObjectURL en IE11
create blob from url (3)
¿Por qué no puedes abrir el enlace en la siguiente demostración?
http://html5-demos.appspot.com/static/a.download.html
Ni siquiera puede hacer clic derecho y abrirlo en una nueva pestaña / ventana. ¿Hay alguna configuración en el navegador que deba personalizar?
Aquí está la función para descargar cualquier archivo como blob. (probado en IE y No-IE)
var download_csv_using_blob = function (file_name, content) {
var csvData = new Blob([content], { type: ''text/csv'' });
if (window.navigator && window.navigator.msSaveOrOpenBlob) { // for IE
window.navigator.msSaveOrOpenBlob(csvData, file_name);
} else { // for Non-IE (chrome, firefox etc.)
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
var csvUrl = URL.createObjectURL(csvData);
a.href = csvUrl;
a.download = file_name;
a.click();
a.remove();
}
};
Nota: Por favor, cambie el tipo de su archivo, si es necesario.
Esta demostración usa Blob URL que no es compatible con IE debido a restricciones de seguridad.
IE tiene su propia API para crear y descargar archivos, que se llama msSaveOrOpenBlob
.
Aquí está mi solución de navegador cruzado que funciona en IE, Chrome y Firefox:
function createDownloadLink(anchorSelector, str, fileName){
if(window.navigator.msSaveOrOpenBlob) {
var fileData = [str];
blobObject = new Blob(fileData);
$(anchorSelector).click(function(){
window.navigator.msSaveOrOpenBlob(blobObject, fileName);
});
} else {
var url = "data:text/plain;charset=utf-8," + encodeURIComponent(str);
$(anchorSelector).attr("download", fileName);
$(anchorSelector).attr("href", url);
}
}
$(function () {
var str = "hi,file";
createDownloadLink("#export", str, "file.txt");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a id="export" class="myButton" download="" href="#">export</a>
Si los datos provienen de ajax, entonces puedes agregar
if (window.navigator.msSaveOrOpenBlob)
xhttp.responseType = "arraybuffer";
else
xhttpGetPack.responseType = "blob";
/////////////////////////////////////////////////
var a = document.createElement("a");
document.body.appendChild(a);
a.style.display = "none";
// IE
if (window.navigator.msSaveOrOpenBlob)
{
a.onclick = ((evx) =>
{
var newBlob = new Blob([new Uint8Array(xhttpGetPack.response)]);
window.navigator.msSaveOrOpenBlob(newBlob, "myfile.ts");
});
a.click();
}
else //Chrome and safari
{
var file = URL.createObjectURL(xhttpGetPack.response);
a.href = file;
a["download"] = "myFile.ts";
a.click();
window.URL.revokeObjectURL(file);
}