2009-12-05 6 views
4

Je suis à la recherche d'un événement proche pour popup. J'ai trouvé un for XUL, mais j'en ai besoin pour HTML.La bonne façon de gérer la fermeture popup

La propriété Popup a la propriété closed.

>>> var popup = open('http://example.com/', 'popup', 'height=400,width=500'); 
>>> popup.closed 
false 

Eh bien, je peux check it once at half second. J'ai testé sur Chrome 4.0.249.27, Opera 10.10, Safari 4.0.4 et Firefox 3.5.5. Tout fonctionne bien.

Mais setInterval me dérange. C'est moche. Existe-t-il une meilleure façon de le faire?

MISE À JOUR: J'utilise des fenêtres contextuelles pour la boîte de dialogue d'authentification (oAuth, en fait). Je veux envoyer des données à la fenêtre parente après la fermeture du popup (via postMessage).

Page intérieure d'un autre domaine. Par conséquent, je ne peux pas ajouter d'événement (unload) à cause des restrictions de sécurité.

Je ne peux pas utiliser iframe en raison du script iframe buster. Donc, je ne peux pas utiliser de boîtes de dialogue modales jQuery fantaisie.

Je ne peux pas éditer quoi que ce soit inside popup.

+0

Gah! J'ai vu le moyen de le faire juste l'autre jour! Dans la fenêtre nouvellement créée il y a une propriété, je pense une propriété de document qui vous permet de vous référer à la fenêtre d'origine qui a créé, et dire exécuter une fonction. Il fonctionne un peu comme popup.closed dans votre exemple, sauf l'inverse –

+0

aha, trouvé - réponse ci-dessous. –

Répondre

1

Vous pouvez regarder dans l'événement unload, jetez un oeil à Javascript: Popups

modifier: comme vous avez dit que vous ne pouvez pas modifier quoi que ce soit à l'intérieur de la fenêtre, il n'y a pas vraiment d'options à gauche. Je crois que votre code actuel setInterval fait bien le travail. Vous devriez vous demander si la détection en temps réel de la fermeture du popup est absolument critique. Cette minuterie de 500 millisecondes n'engendrera certainement pas de ressources ou n'amènera pas un ordinateur à genoux.

+0

Cela ne fonctionnera pas. J'ai mis à jour la question. – NVI

0

Je l'ai utilisé jQuery Dialog et il a un événement proche

http://jqueryui.com/demos/dialog/. Je ne sais pas si j'ai bien compris votre question, pourquoi voulez-vous utiliser la minuterie?

+0

J'ai mis à jour la question. – NVI

0

Utilisez window.opener dans la fenêtre contextuelle. dire quelque chose comme:

onunload = opener.alert('popup closed'); 

ou

onunload = opener.nameOfAFunction(); 
+0

Je ne peux rien modifier dans le popup. – NVI

+0

Parce que vous ne voulez pas, ou n'avez pas accès au fichier? Vous pourriez faire quelque chose comme popup.onunload = opener.alerte ('popup fermé'); si vous n'avez pas accès au fichier. Si vous ne voulez pas, alors pourquoi pas. Si une autre raison pour laquelle vous ne pouvez pas, s'il vous plaît expliquer. –

+0

Je n'ai pas accès au fichier. en fait « Fichier » quelque chose comme https://api.login.yahoo.com/oauth/v2/request_auth?oauth_token=rpfbncv&oauth_nonce=123456800&oauth_timestamp=1257965400&oauth_consumer_key=ef1uGeq4fP9vbnDXQAtlN0IcKvY8RTef0MztKJfBRYacPiuYmQXFdi10DOU3WSDVfn7MQw5basdrn92urX47wlD3F6G4oOA6JHE6&oauth_signature_method=plaintext&oauth_signature=1e782b9c13315e30d2fbac12348942cc9db674f2%26&oauth_version=1.0&xoauth_lang_pref=en-us&oauth_callback=http:/ /mysite.com/callbackurl.php – NVI

Questions connexes