2012-09-04 14 views
5

por lo supongamos que hago estadetectar la existencia de ventana después de recarga

var myWindow = false; 
$('someelement').click(function(){ 
    var myWindow = window.open('url', 'name', 'width=100,height=200'); 
}); 

por lo que el usuario hace clic en el elemento en la ventana A y una nueva ventana (ventana de llamarlo B) se abre ...

pero supongamos que la ventana A se vuelve a cargar ... debido a esto, var myWindow ahora se establece en falso ... pero la ventana B sigue abierta ... ¿cómo puedo detectar la existencia de la ventana B desde la ventana A después de la ventana A se vuelve a cargar

Sé que puede hacer esto:

var hasWindow = window.open('', 'name'); 

y ha de devolver una referencia a la ventana B si ya está abierta ..

Pero entonces, si la ventana B no se abre, sin embargo, esta vez dará lugar a una abertura de la ventana, lo cual es indeseable

¿Cómo puedo obtener una referencia a la ventana B si está abierta sin activar la apertura de una nueva ventana en el caso de que la ventana B no esté abierta? (sin recurrir a trucos de cookies)

Respuesta

1

La mejor manera de mantener un poco de estado sin almacenar en cookies es guardar algo en su window.name. Sin embargo, solo funcionará con una cadena, por lo que deberá guardarla como una cadena JSON si desea más que un solo bit de datos.

para que diga:

var keptState; 
if (window.name !== "") { 
    keptState = JSON.parse(window.name); 
} 

a escribir:

state = { 
    "popupOpened" : true, 
    "popupName" : "otherWindowName" 
}; 
window.name = JSON.stringify(state); 

En el otro lado de la actualización (o incluso navegar fuera de la página y la espalda), que va a mantener sus variables que se querido. Sin embargo, si realmente quiere una referencia a la otra ventana, está solo para eso. No puedo pensar en ninguna forma de determinar que en realidad está allí. Esto sería un problema si, por ejemplo, alguien cerró la ventana emergente por su cuenta.

Al menos de esta manera, puede averiguar si lo ha abierto. Entonces podrías hacer una ventana emergente si realmente necesitas esa ventana sin la ventana emergente. Esto siempre se siente un poco turbio cuando lo hago, pero es probablemente la mejor manera de hacer lo que estás pidiendo.

var myWindow = window.open('', 'otherWindowName'); 
myWindow.blur(); 
window.focus(); 
Cuestiones relacionadas