2011-05-25 19 views
14

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

13

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.

+0

Supongo que eso es lo que hace el complemento a partir de esta respuesta http://stackoverflow.com/a/20973242/1175496 –

+0

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

1

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).

+1

Acaba de pasar haciendo las revisiones. ¿Viste esto [publicación en stackoverflow] (http://stackoverflow.com/questions/1106377/detect-when-browser-receives-file-download)? –

Cuestiones relacionadas