Gestionar la descarga de un fichero existente en un servidor. (Html, AJAX y JavaScript)

Tengo un problema con un pequeño servidor que tiene mi sistema.
En la web tengo un botón para descargar un fichero.
Este desde JavaScript hace un post al Servet para crear el fichero a descargar y cuando el proceso es un success hago un

windows.open(/fichero).

Eso hace que el web browser abra el típico popup de descarga que todos conocemos o que lo descargué directamente (dependiendo de la configuración).

Mi problema es que desde el JavaScript no tengo ninguna forma de saber cuándo esa ventana de ha cerrado. Lo necesito saber porque necesito ejecutar otro comando cuento eso pase.

¿Alguna idea?

Pd. Sorry si no me explicado bien

Puedes guardar una variable con lo que te devuelve el Windows open

Const popup = windows.open(…

Y luego tienes esto ( no se si he escrito bien el método)

Popup.onbeforeunload(() => { … })

Creo que te debería valer. Solo vale cuando el open habré algo dentro del mismo origin. Si eso no te funciona hay que tirar de hacks con setInterval mirando cuando popup.closed es true

Perdón que ando con el movil

1 me gusta

Yo tengo un interval puesto que me comprueba con Windows.closed para hacer una cosa u otra.
El problema es que la ventana se cierra y ese valor nunca cambia

Pero no tienes que comprobar Window.closed tienes que comprobar lo que te devuelve al hacer el window.open

1 me gusta

Var down = window.open(/file.tar.gz)

SetTimeout(funca, 1000)

Where

Funca{

If(down.closed==false)

else

}

Y nunca se pone closed to true

Si, es algo así pero usando setlnterval en vez de setTimeout

Si no te chusca no sabría que decirte así de primeras y desde el móvil sin poder probar jajaja

1 me gusta

Gracias miraré lo que me dices

Lean promesas.

Pregunta absurda porque si pongo un botón (input Burton) con onclick=myfuction() defino esa función en el mismo html en local me funciona y cuando lo subo al servidor, no???

El botón está dentro de un div para Wire solo aparezca en una pestaña

Estoy leyendo por encima y mi cerebro interpreta vuestras palabras así

但是我到底在读什么

HTML no es un lenguaje de programación, no interpreta qué es una función.

Una función debería estar definida bien en un .js que esté asociado al html (como hace Angular), o por lo menos en una jQuery dentro del html.

Insisto en que leas promesas para resolver este tipo de comportamiento, usar timeInterval y similar no es forma de programar web.

2 Me gusta

Es que no tengo ni puta idea. No se ni el orden en que se crea Los DOM.
Cómo se gestionan las pestañas dentro de una misma página ni nada.

No sé de dónde estás aprendiendo a programar frontend, pero suena a querer empezar la casa por el techo.

Sonará raro, pero lo visual es menos del 30% del trabajo de frontend.

Tu función myFunction tendría que estar definida en ese .js, y tu html debería implementar jQuery y convocar ese .js para ejecutar myFunction.

No estoy aprendiendo es un parche para lo que me han pedido.
Yo soy 100% backend

Pero me vendría bien una guía para entender el flujo de las cosas

Imagino que se refiere a que lo ha puesto en un <script>

ikki lo primero es abrir las developer tools del navegador y ver si te sale algun error en la consola.

2 Me gusta

Eso ya lo sé :laughing:, el problema es que no detecta el botón.
Lo que me pierde es que por ejemplo si miro por fotos ves que te dicen que los pongas dentro de onready otro on pagecreate otros en submit. Uno lo coges de $(document) otros directamente del elemento y otras opciones y me pierdo

Si, hay muchas maneras de hacer lo mismo, ya me pasaba a mi al princpio que vas mirando de un sitio y de otro y las funciones no tenian mucha consitencia :sweat_smile:

Lo que me extraña es que en un sitio te vaya y en otro no el botón ahí ya no se que decirte.

Por favor seamos serios ( lo digo también por el otro comentario que dices despues )

Window.open no devuelve ninguna promesa

Tú puedes envolver sus funciones basadas en callbacks en promesas pero la realidad es que da igual.

El setInterval en este caso es un hack para un tema en concreto que es tener un hook para una ventana de un origin distinto

No te nos flipes tanto, pasando un link de promesas y luego diciendo que está empezando la casa por el tejado

Que por cierto lo que ha puesto del html es totalmente valido, que es eso de implementar jquery XD ahora no sabemos añadir eventos en html de forma nativa sin usar una librería como jquery pero vamos dando lecciones de cómo programar web usando promesas?

No dije que lo hiciese.

Al resto :+1:

Si te funciona en local y no en un servidor tiene pinta que es el orden de cómo carga los ficheros JavaScript o algo parecido por qué si no es raro. En el navegador está bien cargado el fichero?

Normalmente si ese input Button lo tienes dentro de un formulario solo funciona de forma nativa los submit que pongas al form. Si quieres que funcione el botón tienes que poner type Button en la etiqueta del input, pero imagino que ya lo tengas asi.

De todas formas te recomiendo que en local también lo tengas todo ejecutando en un servidor así te libras de sorpresas

1 me gusta