2009-08-12 7 views
3

Ma page HTML effectue les opérations suivantes:Comment puis-je notifier la page parente lorsqu'un popup a terminé un chargement initié par le parent?

var popup = window.open(...); 
// Wait for popup to load 
popup.onload = function() { do_something(); }; 
popup.location = "new-page.html"; 

Je voudrais do_something à appeler quand new-page.html chargement terminé. Mais ce que j'ai actuellement ne fonctionne pas - do_something n'est jamais appelé.

Comment est-ce que je peux faire ce travail? Je me soucie seulement de faire fonctionner ceci dans FF 3.5, si cela rend les choses plus faciles.

+1

:) Je ne suis pas en utilisant ce sur un site de production; J'ai en fait besoin que cela fonctionne pour que je puisse tester un patch que j'écris pour Firefox. –

Répondre

4

vous pouvez utiliser window.opener. <functionName> et placez votre code de notification dans cette fonction sur la page parent

+0

C'est exactement ce dont j'avais besoin. Merci! –

+1

Attention à window.opener. C'est IE propriétaire, et ne fait partie d'aucune recommandation de normes, et les gens ont eu des problèmes avec ceci dans firefox: codingforums.com/showthread.php? T = 44015 –

0

Essayez d'avoir la méthode doSomething appelée dans onload de la fenêtre contextuelle. Vous pouvez vous référer au parent en utilisant window.opener

0

Dans votre .html qui est chargée, vous pourriez avoir une simple doublure à la fin qui appelle une fonction sur la fenêtre d'ouverture (si elle existe)

<script type='text/javascript'> 
if (window.opener && window.opener.do_something) window.opener.do_something(window); 
</script> 
1

Ou, sans déranger le code HTML de la fenêtre enfant, du parent, vous pouvez attacher un écouteur sur l'événement de chargement de l'iframe. Dans cette solution, je vais utiliser jQuery pour simplicity, mais n'importe quelle bibliothèque ou même la pièce jointe d'un événement manuel fera l'affaire.

Dans le code HTML du parent:

<iframe id="foo"></iframe> 
<script type='text/javascript'> 
    var element = $("#foo"); 
    element.load(function(eventObject) { 
     // do something here 
    }); 
    // Now that the event listener is attached, we can set the source. 
    element[0].src = "foo.html"; 

</script> 

Remarque, je n'ai pas essayé de placer la source première, puis attacher l'auditeur, je ne sais pas si ce serait garantie de toujours travailler. Il peut arriver que l'iframe soit créé/chargé avant que l'écouteur de charge soit attaché, je ne suis pas sûr. Mais, en réglant le src après que l'écouteur soit attaché, je suis sûr que l'écouteur de chargement sera appelé.

Shane

http://www.shanetomlinson.com

http://www.ubernote.com

+0

Je suis curieux de savoir si vous pouvez obtenir ce travail sans jQuery et avec un popup au lieu d'un iframe. C'est essentiellement ce que j'essayais de faire dans l'exemple que j'ai donné à l'origine, mais je ne pouvais pas le faire fonctionner. (IIRC, j'ai pu le faire fonctionner en mettant 'iframe.onload = do_something'.) –

Questions connexes