Tengo un problema con el evento onLoad de un iframe en Google Chrome. Creé un iframe y establecí valor para su atributo "src" para obtener un archivo del servidor. Mientras el servidor está procesando, se muestra un cuadro de espera hasta que el cliente obtenga el archivo devuelto. Traté de usar el evento onLoad de iframe para detectar cuándo el cliente obtiene el archivo para desactivar esa caja de espera, pero en Google Chrome ese controlador de eventos no funciona.
Con Firefox, cuando el cliente obtiene un archivo, un mensaje emergente "Guardar en" se mostrará automáticamente y se disparará el evento "cargar", pero esto no ocurre en Chrome.
¿Podría decirme cómo manejar este problema? Muchas gracias!¿Qué evento de JS se activa cuando Chrome obtiene el archivo de descarga?
Respuesta
Me he encontrado con este problema exacto. Resulta que Chrome no genera absolutamente ningún evento en un iframe luego de la descarga de un archivo.
Como no hay eventos que tener en cuenta y está devolviendo un archivo (como apostado a cualquier contenido en línea) la solución me obligó a inspeccionar el contenido del iframe después de unos segundos, si está vacío, entonces supongamos que no hubo errores y los resultados se procesaron correctamente. Si contiene datos (mi servidor devolverá JSON si hay algún error) entonces maneje los datos de error en consecuencia.
La forma en que resolví este problema fue establecer una cookie (done = 0) cuando la página que va a tener el iframe se carga, uso javascript para colocar el iframe en la página y cambio el valor de esto cookie cuando la secuencia de comandos fuente del iframe se ejecuta con éxito (hecho = 1).
Luego utilicé una simple llamada ajax con un settimeout para devolver el valor de la cookie, cuando el valor es 1 puedo activar el evento onload (que funciona para todos los demás navegadores).
Acaba de pasar haciendo las revisiones. ¿Viste esto [publicación en stackoverflow] (http://stackoverflow.com/questions/1106377/detect-when-browser-receives-file-download)? –
me he encontrado con este mismo problema y que terminé usando este plugin: http://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/
Se basa en el mismo concepto Morgan describe, es fácil de usar y y funcionó muy bien.
- 1. Extensión de Chrome: ¿se activa un evento cuando se crea un elemento?
- 2. No puedo desencadenar el evento de descarga en Chrome
- 3. Evitar que el evento click se active cuando se activa el evento dblclick
- 4. evento de cambio no se activa cuando el cambio proviene de otra función
- 5. Knockout JS: evento de cambio que no se activa para la fecha HTML5 en el iPad
- 6. iOS Antecedentes descarga cuando la aplicación no está activa
- 7. ¿Por qué se dispara el evento 'window.resize' cuando se cambian las pestañas en Chrome (6.0.472.55)?
- 8. Evento ASP.Net Session_Start que no se activa
- 9. ¿Cómo encontrar el archivo .js donde se declara cierta función js (desde Chrome)?
- 10. ¿Por qué el evento de cambio de jquery no se activa cuando establezco el valor de una selección usando val()?
- 11. ¿Se activa el evento Application_Start en global.asax cuando se vuelve a publicar el código?
- 12. backbone.js haga clic en el evento que no se activa
- 13. Evento de delegado que se activa dos veces
- 14. ¿Por qué el evento de desplazamiento de rueda no se activa cuando el mouse está sobre un elemento "posición: fijo"?
- 15. Evento UIDeviceOrientationDidChangeNotification que no se activa cuando el usuario deshabilita la rotación automática de la pantalla
- 16. socket.io - el evento 'connect' no se activa en el cliente
- 17. ¿Cómo saber en qué archivo se definió una var global js en la consola de Chrome?
- 18. no se puede disparar el evento de pulsación de tecla cuando presiono la tecla borrar
- 19. Mobile Safari: evento "touchend" que no se activa cuando se elimina el último toque?
- 20. evento onScroll no se activa para listview
- 21. ¿Por qué el evento de envío de un formulario no se activa (jQuery)?
- 22. Chrome antes de descargar el evento cuando la pestaña (o navegador) se cierra
- 23. Qué evento se invoca cuando pulsamos UISearchBar
- 24. evento onTouch que a veces no se activa ACTION_POINTER_DOWN
- 25. ¿Por qué el evento descargado de la ventana no se activa en WPF?
- 26. En C# WPF, ¿por qué el evento SelectionChanged de mi TabControl se activa con demasiada frecuencia?
- 27. onmouseout no se activa cuando el elemento desaparece
- 28. Obtiene el título actual de la ventana activa en Java
- 29. ¿Por qué WebBrowser_DocumentCompleted() se activa dos veces?
- 30. ¿por qué se activa el evento DataGrid MouseDoubleClick cuando hace doble clic en la barra de desplazamiento?
Supongo que eso es lo que hace el complemento a partir de esta respuesta http://stackoverflow.com/a/20973242/1175496 –
Consulte la siguiente publicación para obtener un código de ejemplo: https://stackoverflow.com/questions/12076494/ onload-in-iframes-not-working-if-iframe-have-non-html-document-in-src-pdf-or-t/12190776 # 12190776. Me tomó un poco de tiempo descubrir que hay otras respuestas en otros lugares, que se refieren al uso del evento 'onload', donde en realidad es falso. Es posible que tenga algo que ver con que los últimos navegadores web estén más alineados con la especificación. – RZet