2012-05-29 24 views
9

Estoy tratando de llamar a una función después de que mi función window.open se haya cargado por completo.Función de llamada de Javascript después de window.open

Sin embargo, al utilizar la función de carga se está llamando demasiado pronto. La URL que se está accionando abre una hoja de cálculo de Excel y puede tardar de 2 segundos a 1 minuto en descargarse.

La función de carga se invoca tan pronto como se ha llamado a la función window.open. Sin embargo, necesito saber cuándo se ha abierto el documento Excel, no cuándo se tocó la URL.

He tratado de establecer un intervalo, pero eso no es ser llamado:

w = window.open(url,'_parent',false); 

w.onload = function(){ 
    console.log('here'); 
    setInterval(function(){ 
     alert('Hi'); 
    },10); 
+0

¿Por qué no hacer esto en la ventana secundaria? Y si no te importa compartir el código que abre el archivo de Excel, sería genial, porque la carga del archivo Excel es el desencadenante real que deseas. –

+0

solo quieres asegurarte de que el archivo Excel esté abierto o necesites saber exactamente cuando se abrió? – zaw

+0

Tengo una grilla extjs detrás de esto que necesita saber cuándo se abrió el archivo Excel/window ha cargado completamente el documento. Es un script CGI que se llama para abrir el archivo de Excel. – pm13

Respuesta

4

en primer lugar que con el fin de hacer esto sin ser bloqueado debido a las restricciones de varios dominios (o sin tener que parametrizar encabezados CORS en su servidor), debe:

  • sirven tanto a la página principal y el contenido emergente (el archivo de Excel) desde el mismo dominio y el mismo puerto
  • abrir su página principal en http:// y no en file://

Si se respetan estas condiciones, la mejor solución es utilizar jQuery como sus load espera de función "hasta que todos los activos, como las imágenes han sido completamente recibida":

<html> 
    <head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
    </head> 
<body> 
<script> 
var popup = window.open('popup.html'); 
$(popup.document).load(function() { 
    alert('loaded'); 
    // do other things 
}); 
</script> 
</body> 
</html> 

que tener cuidado con su esquema global: cada navegador/configuración puede hacer algo diferente cuando crea que "abren" el archivo. No hay manera de detectar con un simple open si decidieron descartarlo, no tenía el complemento adecuado, simplemente lo descargó.

+0

No estoy seguro de que los encabezados de cors permitan omitir el origen de la ventana. – user2284570

Cuestiones relacionadas