2012-09-04 13 views
5

così supponiamo faccio questorilevare l'esistenza di finestra dopo la ricarica

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

così l'utente fa clic sull'elemento sulla finestra A e una nuova finestra (lo chiamano finestra B) è aperta ...

ma supponiamo che la finestra A venga ricaricata ... a causa di ciò, var myWindow ora è impostato su false ... ma la finestra B è ancora aperta .... come posso rilevare l'esistenza di Window B dalla finestra A dopo la finestra A viene ricaricato

So che si può fare questo:

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

e tornerà un riferimento alla finestra B se è già aperto ..

Ma allora se finestra B non è ancora aperto, questo sarà invece innescare una finestra aperta, che è indesiderabile

Come posso ottenere un riferimento alla finestra B se è aperto senza attivare una nuova finestra di apertura nell'evento in cui la finestra B non è aperta? (senza ricorrere ai cookie)

risposta

1

Il modo migliore per mantenere un po 'di stato senza archiviare nei cookie è salvare qualcosa nel nome window.name. Funzionerà solo con una stringa, quindi, dovrai salvarlo come stringa JSON se desideri più di un singolo bit di dati.

Per leggere:

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

Per scrivere:

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

Dall'altra parte del refresh (o anche navigando lontano dal sito e ritorno), sarà mantenere le variabili ricercato. Se in realtà volevi un riferimento per l'altra finestra, tuttavia, sei da solo per quello. Non riesco a pensare ad alcun modo per determinare che sia effettivamente lì. Questo sarebbe un problema se, per esempio, qualcuno chiudesse la finestra popup da solo.

Almeno in questo modo, è possibile scoprire se è stato aperto. Quindi potresti fare un popunder se avessi davvero bisogno di quella finestra senza il popup. Mi sembra sempre un po 'losco quando lo faccio, ma probabilmente è il modo migliore per fare quello che stai chiedendo.

var myWindow = window.open('', 'otherWindowName'); 
myWindow.blur(); 
window.focus(); 
Problemi correlati