Fjmasero:
Cuando cierras el opener, la ventana abierta aún conserva una referencia al objeto opener, por eso no funciona que evalues window.opener.
Pero lo que si cambia, es "
window.opener.name ". Es probable que la ventana no tenga nombre, o mejor dicho que su nombre sea un empty string "". Evaluar "window.opener.name" entonces, daría como resultado false. No es de mucha utilidad (aún). Y si la ventana ha sido cerrada, evaluar "window.opener.name" te causará un error puesto que dicha propiedad ya no existe.
Entonces, usamos el operador "
typeof ", el cual nos devolvera un string indicando el tipo de objeto de que se trata.
typeof window.opener.name cuando opener está abierto devuelve "string" aún cuando no tenga un nombre y devuelve "undefined" cuando lo que se evalua no existe.
Ahora, bien IE6 se comporta de un modo extraño y en lugar de devolver "undefined" devuelve "unknown". Y NS7 no hace nada cuando debería devolver "undefined".
Si esto te sirve, tu código debería quedar algo así:
Código:
function fOpener(){
if(typeof window.opener.name == "undefined" || typeof window.opener.name == "unknown"){
alert("Opener ha sido cerrado");
}else{
alert("Opener está Abierto");
}
}
Espero que te pueda servir esta información.
Saludos.