¿Cuál es la mejor forma de varios navegadores para abrir un cuadro de diálogo de descarga (supongamos que podemos configurar la disposición de contenido: adjunto en los encabezados) sin navegar fuera de la página actual o abrir ventanas emergentes, lo cual no funciona bien en Internet Explorer (IE ) 6.
javascript
mkoryak
fuente
fuente
Content-Type: application/octet-stream
yContent-Disposition: attachment
.Este javascript es bueno porque no abre una nueva ventana o pestaña.
fuente
Siempre agrego un target = "_ blank" al enlace de descarga. Esto abrirá una nueva ventana, pero tan pronto como el usuario haga clic en Guardar, la nueva ventana se cerrará.
fuente
Coloque esto en la sección de encabezado HTML, estableciendo la
url
var en la URL del archivo que se descargará:Luego ponga esto en el cuerpo, que iniciará la descarga automáticamente después de 5 segundos:
(Desde aquí .)
fuente
Sé que se hizo la pregunta,
7 years and 9 months ago
pero muchas soluciones publicadas no parecen funcionar, por ejemplo, usar un<iframe>
solo funciona conFireFox
y no funciona conChrome
.Mejor solución:
La mejor solución de trabajo para abrir una ventana emergente de descarga de archivos
JavaScript
es usar unHTML
elemento de enlace, sin necesidad de agregar el elemento de enlacedocument.body
como se indica en otras respuestas.Puede utilizar la siguiente función:
En mi aplicación, lo estoy usando de esta manera:
Demo de trabajo:
Mostrar fragmento de código
Nota:
link.download
atributo para que el navegador no abra el archivo en una nueva pestaña y active la ventana emergente de descarga.fuente
link
hacer clic y ocultarla después de un tiempo de espera, usando este código:,link.onclick = function() { document.body.innerText = "The file is being downloaded ..."; setTimeout(function() { document.body.innerText = ""; }, 2000); }
puede verlo funcionando en este violín , pero tenga en cuenta que no es una forma recomendada de hacerlo, se manejaría mejor si estuviéramos usandoAjax
.iframe
ver esta respuesta .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.
class="screenReaderText"
es mi clase para diseñar contenido que está presente pero no se puede ver.css:
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.
fuente
Uso de la API de archivo de URL de objeto de blob HTML5 :
fuente
URL.revokeObjectURL(url)
cuando ya no se necesita el archivo para liberar memoriaLa modificación de la ubicación de la ventana puede causar algún problema, especialmente cuando tiene una conexión persistente como websocket. Así que siempre recurro a la vieja solución de iframe.
HTML
Javascript
fuente
Si el enlace es a una URL de archivo válida, simplemente la asignación de window.location.href funcionará.
Sin embargo, a veces el enlace no es válido y se requiere un iFrame.
Haz tu event.preventDefault normal para evitar que la ventana se abra, y si estás usando jQuery, esto funcionará:
fuente
Después de horas de intentarlo, nació la función :) Tuve un escenario en el que tenía que mostrar el cargador a tiempo mientras el archivo se preparaba para descargar:
Trabajando en Chrome, Safari y Firefox
fuente
Qué tal si:
De esta manera funciona en todos los navegadores (creo) y te permite poner un mensaje como: "Si la descarga no comienza en cinco segundos, haz clic aquí".
Si necesita que sea con javascript .. bueno ...
Saludos
fuente
Un iframe pequeño / oculto puede funcionar para este propósito.
De esa manera, no tendrá que preocuparse por cerrar la ventana emergente.
fuente