txt para link forzar desde descargar descarga con como automatica archivos archivo javascript html iframe download

para - ¿Hay alguna manera de detectar el inicio de una descarga en JavaScript?



forzar descarga con js (3)

En nuestro proyecto actual, ofrecemos una descarga de PDF que el usuario puede personalizar a través de un formulario HTML que envía. La generación dinámica del PDF lleva varios segundos y me gustaría visualizar esto, por ejemplo, deshabilitando el botón de enviar hasta que comience la descarga. Desafortunadamente, no pude encontrar una manera de detectar cuándo comienza la descarga *. Entonces no sabría cuándo reactivar el botón de enviar.

Ya traté de especificar un IFrame como objetivo de mi formulario HTML, con la esperanza de que se desencadenara el evento onload . Sin embargo, no es así, probablemente porque el PDF se envía con un Content-disposition: attachment " Content-disposition: attachment " y en realidad no se carga en el IFrame.

La única solución en la que puedo pensar ahora implica generar el PDF en un archivo temporal en el servidor, lo que me gustaría evitar.

*) Permítanme aclarar esto: no necesitaría saber si la descarga se terminó o si realmente se inició. Me gustaría detectar el punto en el que el navegador le preguntará al usuario si abrir o guardar el archivo. Supongo que esto sucede cuando el navegador recibe el encabezado HTTP.


La solución más simple sería estimar el tiempo (generosamente) y hacerlo de esa manera. Es un truco, pero da el efecto deseado. La otra opción podría ser enviar el formulario con una devolución de llamada utilizando Ajax para enviar el formulario y hacer que el generador devuelva los detalles a la página de llamada. http://www.jquery.com/ podría ser un buen lugar para comenzar con esa opción.


Lo que desea es poder detectar cuándo el tamaño del archivo descargado cambia de 0 a un valor positivo. Por lo que sé, es imposible hacer eso con javascript; necesitas un complemento que pueda acceder al sistema de archivos del cliente.

Un trabajo recomendado: crea una sesión por descarga. Haga que el cliente consulte al servidor sobre el estado de la descarga. Esto podría ser "no existente", "no iniciado", "iniciado", "terminado". Necesita algún trabajo adicional del servidor para conservar y actualizar el estado de la descarga más un marco AJAX.


Si yo fuera usted, haría una llamada AJAX al servidor con la información, generaría el archivo, luego devolvería el nombre del archivo / id / lo que sea al javascript, que luego hace window.location algo así como download.php? Id = x (pero el archivo ya se generó, por lo tanto, solo está configurando los encabezados y leyéndolo), en cuyo punto puede volver a habilitar el envío.