Pregunta

Estoy desarrollando una aplicación web que se abre una ventana emergente usando windows.open (..). Tengo que llamar a una función en la ventana abierta con el asa devuelta por "window.open", pero siempre estoy recibiendo el mensaje de error "addWindow.getMaskElements no es una función", como si no pudiera acceder a la función declarada en la ventana secundaria. Este es el comportamiento tanto en IE y FF. Mi código es el siguiente:

function AddEmail(target,category)
{
    if(addWindow == null)
    {
        currentCategory = category;
        var left = getDialogPos(400,220)[0];
        var top =  getDialogPos(400,220)[1];
        addWindow = window.open("adicionar_email.htm",null,"height=220px, width=400px, status=no, resizable=no");
        addWindow.moveTo(left,top);
        addWindow.getMaskElements ();
    }
}

He buscado en Google y leer desde diferentes fuentes confiables y al parecer esto se supone que funciona, sin embargo no es así. Una cosa más, las funciones de ventana secundaria se declaran en un archivo .js separada que se incluye en el archivo adicionar_email.htm. ¿Esto hace una diferencia? No debería .. Por lo tanto, si alguien tiene topó con un problema similar, o tiene alguna idea de lo que estoy haciendo mal, por favor, responda a este mensaje. Gracias por adelantado.

Kenia

¿Fue útil?

Solución

La creación de la ventana no es una operación de bloqueo; la secuencia de comandos continúa ejecutándose mientras que la ventana es de apertura y cargar el código HTML y JavaScript y analizarlo.

Si se va a añadir un enlace en su página original como esto:

<a href="#" onclick="addWindow.getMaskElements();">Test</a>

Veías funciona. (Lo probé sólo para estar seguro.)

EDITAR ** **

Otra persona reportó una solución llamando a un proceso de carga en el documento de destino, aquí hay otro enfoque:

function AddEmail()
{

        if(addWindow == null) {
        addWindow = window.open("test2.html",null,"height=220px, width=400px, status=no, resizable=no");
        }

        if(!addWindow.myRemoteFunction) {
            setTimeout(AddEmail,1000);
        } else { addWindow.myRemoteFunction(); }
}

Esto sigue intentando llamar addWindow.myRemoteFunction cada 1 segundo hasta que se las arregla para llamar con éxito a él.

Otros consejos

El problema es que los retornos window.open con bastante rapidez, el documento que se solicita y luego cualquier otro artículo que ese documento puede hacer referencia posteriormente a no aún no han sido cargados en la ventana.

Por lo tanto tratar de llamar a este método tan temprano se producirá un error. Debe adjuntar una función de evento de carga de la ventana abierta y tratar de hacer que igualar a partir de esa función.

El problema con el debajo de uno es:

Cuando el JavaScript se ejecuta en la ventana principal, la ventana secundaria no es de carga. Por lo tanto, la función de invocación desde la ventana padre está en el bucle infinito y que está dando lugar a estrellarse la ventana.

  

La creación de la ventana no es una operación de bloqueo; el guión sigue   para ejecutar mientras que la ventana se abre y cargar el código HTML y   javascript y analizarlo.

     

Si se va a añadir un enlace en su página original como esto:

<a href="#" onclick="addWindow.getMaskElements();">Test</a>
     

Veías funciona. (Lo probé sólo para estar seguro.)

     

EDITAR ** **

     

Otra persona reportó una solución llamando a un proceso de carga en el objetivo   documento, aquí hay otro enfoque:

function AddEmail()
{

        if(addWindow == null) {
        addWindow = window.open("test2.html",null,"height=220px, width=400px, status=no, resizable=no");
        }

        if(!addWindow.myRemoteFunction) {
            setTimeout(AddEmail,1000);
        } else { addWindow.myRemoteFunction(); }
}
     

Esto sigue intentando llamar addWindow.myRemoteFunction cada 1 segundo   hasta que se las arregla para llamar con éxito a él.

Está llamando a la función inmediatamente después de abrir la ventana; la página en la ventana emergente no se puede cargar, sin embargo, por lo que la función no se puede definir en ese punto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top