2010-07-06 4 views
4

J'ouvre une fenêtre nommée en utilisant la fonction window.open:référence de la fenêtre après page parent changé

win = window.open("xxx.html", "mywin"); 

Après que je passe à une autre page de la fenêtre parente, et je veux décider si la fenêtre nommé "mywin" est toujours ouvert ou non.

Si j'étais dans la page parente, j'utiliserais win.closed, mais depuis que j'ai changé de page, j'ai perdu la référence. Comment puis-je le récupérer? :)

Merci.

+0

« Après que je passe à une autre page de la fenêtre parent, "- Actualisez-vous la page du serveur ou ouvrez-vous une nouvelle fenêtre? –

+0

@NM Je n'ouvre pas une nouvelle fenêtre. Je change l'emplacement de la page que j'ai ouvert la fenêtre enfant. – Feyyaz

Répondre

4

Je peux penser à deux voies possibles qui pourraient être la peine d'essayer ...

Tout d'abord, vous pouvez aborder ce en laissant parler la fenêtre enfant à la fenêtre parent plutôt que le parent à l'enfant. Alors que la fenêtre parente perdra la référence à l'enfant lors de la transition de la page, l'enfant devrait être capable de revenir à la nouvelle page (tant qu'il est toujours sur le même domaine) via window.opener. L'enfant peut utiliser l'intervalle défini pour accéder à la fenêtre d'ouverture et définir un statut «toujours ouvert». Il faudrait le coder de façon à pouvoir ne pas avoir de document pendant la transition, mais cela fonctionnerait. Le code serait à peu près le même que ci-dessous, mais vous pourriez l'affiner en gérant le chargement et le déchargement des événements du parent par l'enfant et en n'exécutant que le minuteur entre les transitions.

fenêtre parent (toutes pages)

var childStatus = "unknown"; 

fenêtre enfant

var timerHandler; 

funciton ChildCallBack() 
{ 
    try 
    { 
    window.opener.childStatus = "open"; 
    } 
    catch(e) 
    { 
    } 
} 

timerHandler = window.setInterval(ChildCallBack, 100); 

function window_onclose() 
{ 
    try 
    { 
    window.clearInterval(timerHandler); 
    window.opener.childStatus = "closed"; 
    } 
    catch(e) 
    { 
    } 
} 

window.onclose = window_onclose; 

En second lieu, et idéalement en dernier recours, l'autre, tout à fait horrible, alternative est d'utiliser un iframe. Placez votre page de transition dans un iframe afin que la page principale réelle ne change pas et puisse ainsi maintenir une référence à l'enfant. L'iframe peut être suffisamment grand pour apparaître comme une page entière. C'est une solution comme un hack méchant mais devrait aussi fonctionner.

+0

Laisser l'enfant parler avec le parent est une bonne idée :). Merci. – Feyyaz

0

Essayez d'utiliser le nom de la fenêtre, le deuxième paramètre de la méthode window.open, comme nom de la variable:

win = window.open("xxx.html", "mywin"); 

Et puis quand vous voulez fermer la fenêtre:

mywin.close(); 
Questions connexes