He estado buscando una buena forma de usar javascript para iniciar la descarga de un archivo, tal como sugiere esta pregunta. Sin embargo, estas respuestas no han sido útiles. Luego hice algunas pruebas de xbrowser y descubrí que un iframe funciona mejor en todos los navegadores modernos IE> 8.
downloadUrl = "http://example.com/download/file.zip";
var downloadFrame = document.createElement("iframe");
downloadFrame.setAttribute('src',downloadUrl);
downloadFrame.setAttribute('class',"screenReaderText");
document.body.appendChild(downloadFrame);
class="screenReaderText" es mi clase para diseñar contenido que está presente pero no se puede ver.
css:
.screenReaderText {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
igual que .visuallyHidden en html5boilerplate
Prefiero esto al método javascript window.open porque si el enlace está roto, el método iframe simplemente no hace nada en lugar de redirigir a una página en blanco que dice que el archivo no se pudo abrir.
window.open(downloadUrl, 'download_window', 'toolbar=0,location=no,directories=0,status=0,scrollbars=0,resizeable=0,width=1,height=1,top=0,left=0');
window.focus();