from filename createobjecturl create javascript html internet-explorer blob

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); }