2010-11-24 5 views
10

Est-il possible de rafraîchir la fenêtre parente lorsqu'une fenêtre contextuelle est fermée sans ajouter de code javascript à la fenêtre contextuelle?Actualiser la fenêtre parent lorsque la fenêtre contextuelle est fermée

J'ai une page parent.php sur laquelle les utilisateurs peuvent cliquer sur "Ouvrir popup" pour ouvrir une fenêtre contextuelle. Cette fenêtre affiche le contenu flash et son moi pas possible d'ajouter quelque chose comme

window.onunload = function(){ 
    window.opener.location.reload(); 
}; 

au balisage de la page de fenêtre pop-up.

Existe-t-il une autre méthode pour y parvenir? Merci

+1

Avez-vous essayé d'ajouter le gestionnaire onunload à la poignée de la fenêtre contextuelle de la fenêtre parent? – Gordon

+0

@Gordon - désolé? – Kay

+0

comme montré par benhowdle ci-dessous – Gordon

Répondre

17

Pour faire ce travail dans tous les navigateurs principaux, vous devez gérer le gestionnaire d'événements unload dans le pop-up et faites le rechargement dans la fenêtre principale. Dans la fenêtre principale, ajoutez

function popUpClosed() { 
    window.location.reload(); 
} 

Dans le pop-up:

window.onunload = function() { 
    if (window.opener && !window.opener.closed) { 
     window.opener.popUpClosed(); 
    } 
}; 

Donc, la réponse à votre question est généralement pas, si vous avez besoin de votre code pour travailler dans tous les navigateurs, notamment Internet Explorer .

+0

lorsque l'URL est sécurisée signifie https: ne demande-t-il pas une fenêtre avec des boutons Réessayer et Annuler? – changeme

6

Je suis sûr que vous pouvez simplement ajouter à parent.php:

var myPop = "pop up window selector" 
myPop.onunload = function(){ 
    location.reload(); 
}; 
+0

+1 mais pourrait changer ' var myPop = "pop up window selector" 'à var myPop = window.open();' pour rendre l'exemple plus clair – Gordon

+0

Désolé, je ne pourrais pas penser au sélecteur du haut de ma tête!Merci de signaler cela sur Gordon – benhowdle89

+0

Cela ne fonctionnera pas dans IE. Ma réponse sera. S'il vous plaît arrêtez d'upvoting. –

1

avait un problème similaire pour détecter le popup de fermeture dans la fenêtre parente. Je pense que la raison était en ne définissant pas la propriété document.domain.

quelque façon que Tim ajouter à bas répondre à la propriété document.domain pour les fenêtres pop-up et comme ceci:

<script type="text/javascript"> 
     document.domain='<?=$_SERVER['SERVER_NAME']?>'; 
    </script> 

et au lieu de

window.onunload = function() { 
    if (window.opener && !window.opener.closed) { 
     window.opener.popUpClosed(); 
    } 
}; 

je dans le menu contextuel:

 <body onunload="window.opener.popUpClosed();"> 
2

Le problème avec la méthode de Tim Down est qu'elle ne répond pas à la question initiale. L'exigence est que vous ne peut pas ajouter du code à la fenêtre pop-up.

Une solution que j'ai trouvée, bien qu'elle ne soit pas particulièrement élégante, est efficace dans tous les navigateurs sur lesquels j'ai testé.

Vous allez simplement interroger l'objet fenêtre nouvellement créé, en vérifiant s'il est toujours ouvert.

Sur fenêtre parent:

var register; 
    var poll; 

    function isOpen(){ 
     if(register.closed){alert("Closed!"); clearInterval(poll);} 
    } 


    function create(){ 

     register = window.open("http://www.google.com","register","width=425,height=550"); 
     poll=setInterval("isOpen()",100); //Poll every 100 ms. 
} 
Questions connexes