Ok Tunait te entendi perfecto pero segun eso en mi programa eso no parece ser lo que esta haciendo...
lo que pasa es que yo tengo dos ventanas, Ventana A y su hija la ventana B.
La ventana B se abre desde un boton en la ventana A. Cuando la ventana B se abre, el boton de la ventana A se deshabilita.
la ventana B se puede cerrar desde un boton cerrear en la ventana B, la X de la ventana B o si se cierra la ventana A.
Si cierro la ventana B el boton de la ventana A se vuelve a habilitar. Entonces para habilitarlo cuando se cierre por la X yo coloque una funcion que habilita dicho boton de la ventana A en el atributo onunload del body de la ventana B. Esto me crea un problema cuando cierro la ventana B desde el boton de cerrar debido a que para habilitar el boton de la ventana A yo hago un opener.forms[0]....., y si lo cierro desde el boton el valor de opener a cambiado.
Este es el codigo del boton cerrar:
function cerrar()
{
var ventana = window.self;
ventana.opener = window.self;
ventana.close();
}
El asunto es que no me funcionaba entonces lo que hice fue crear una variable global con el valor de 1 y decir en la funcion que corre en el onunload que si el valor es 1 entonces habilite, por otra parte si se cierra con el boton de cerrar en aquella funcion cerrar habilito el boton y le cambio el valor de esta variable a 2, evitando que corra dicho codigo.
De esta manera me funciono cerra la ventana B con la X y con el boton cerrar y habilitaba el boton en ambos casos si errores.
Luego me di cuenta que si se cierra la ventana A se debe cerrar la B, pero lo que hace es cerrar la ventana A y una vez esta este cerrada, cerrar la hijas o la ventana B, el punto esta en que cuando cierro la ventana A esta se cierra y cierra la ventana B pero me corre la funcion del onunload de la ventana B que lo que hace es habilitar un boton de la ventana A pero esta ya ha sido cerrada luego me arroja este error:
Error: El destinatario (servidor [no una aplicacion de servidor]) no esta dosponible ni presente; las conexiones no son validas. La llamada no se ejecuto
Señalandome esta linea de codigo if(eval('ventana' + m))
Entonces lo que hice fue crear en la ventana B una funcion que lo unico que hace es cambiar el valor de la variable global con el fin de que no corra lo del onunload de la ventana B y hacer colocar dentro del cuerpo del if(eval('ventana' + m)) la siguiente linea de codigo:
eval('ventana' + m + ".cambio()") /*cambio es la funcion que cambia el valor de la variable*/
La coloque que antes de la linea que cierra la ventana.
Y listo funciono cierro la ventana A y se cierra la B sin problemas.
Pero ah sorpresa me lleve cuando fui a cerrar la B y luego cerre la A salio de nuevo el error señalandome la misma linea.
Entonces quede reconfundido.
En otra ventana hice lo mismo y funciona todo perfecto pero lo que pasa es que es una unica ventana luego no necesito la funcion eval() sino que le digo vent1.cambio() y ya, en este caso no puedo hacerlo asi.
Espero no te hayas aburrido leyendo este libro
y que me hayas entendido.
cualquier ayuda es bienvenida.
ascar