Comment j'élèverais un événement (jQuery ou vanilla Javascript) quand une fenêtre popup est fermée?
Je veux soulever un événement lorsqu'une fenêtre est fermée, ou, de préférence, juste avant la fermeture. Je suis le stockage de la fenêtre de l'objet comme un objet, mais je ne sais pas de toute façon de se lier à la clôture de l'événement, ou d'un événement juste avant que la fenêtre est fermée.
var popupWindow = window.open("/popup.aspx", "popupWindow", "height=550,width=780");
Est-il possible de s'abonner à la clôture de l'événement à l'aide de jQuery, ou tout simplement cru javascript? Je suis à l'aide de jQuery et ne pouvez pas ajouter une autre bibliothèque, donc si il ne peut pas être fait en jQuery je vais devoir rouler mon propre événement système en quelque sorte, pour qu'elle fonctionne sur tous les navigateurs.
Mise à JOUR:
J'ai essayé d'utiliser l'événement unload en jQuery et pour une raison que l'événement est déclenché dès que mon menu contextuel s'ouvre au lieu de quand il est fermé. Si j'utilise Firebug pour définir un point d'arrêt pour retarder l'événement unload d'être abonné, l'événement unload fonctionne de la façon dont il est censé le faire, mais pour quelque raison que ce soit, il ne fonctionne pas correctement lorsque le javascript est autorisé à exécuter naturellement.
var popupWindow = window.open("/popup.aspx", "popupWindow", "height=550,width=780");
$(popupWindow.window).unload(function() { alert('hello'); });
N'quelqu'un a une idée du pourquoi de l'événement unload pourraient être soulevées lorsque la fenêtre est en cours de chargement?
Un autre hic, c'est que j'ai remarqué que jQuery "décharger" l'événement n'a pas souscrit à la fenêtre comme il le fait normalement si je ne l':
popupWindow.onunload = function(){alert('hello')};
Il semble pour vous désabonner de l'événement à chaque fois qu'il est déclenché. Est-ce censé arriver? Si il n'y avait pas ce bug (ou fonctionnalité?) en jQuery, il serait bien d'avoir l'événement soulevées sur la charge depuis que je puisse vérifier la popupWindow.closed
de la propriété à l'intérieur de l'événement pour assurer la fenêtre était vraiment fermé.
source d'informationauteur Dan Herbert
Vous devez vous connecter pour publier un commentaire.
J'ai créé un observateur qui vérifie si la fenêtre a été fermée:
J'ai essayé de l'observateur d'approche, mais il a couru dans la "permission denied" problème lors de l'utilisation de ce dans IE6. Cela se produit en raison de la propriété fermée de ne pas être entièrement accessible autour de l'événement de fermeture de la fenêtre ... mais heureusement, avec un try { } catch de la construction, il fonctionne bien :o)
Merci magnus
Je pense que j'ai compris ce qui se passe:
Lorsque vous utilisez
window.open
il ouvre une nouvelle fenêtre avec emplacement "about:blank" et puis les changements à l'url que vous avez fourni lors de l'appel de la fonction.Donc, l'événement unload est lié avant le changement de "about:blank" à droite de l'url et est déclenché lorsque le changement se produit.
Je l'ai eu à travailler avec JQuery:
Le jQuery exemple de code pour l'événement unload
$(window).unload( function () { alert("Bye now!"); } );
De la jQuery décharger de la documentation
Edit:
J'ai joué un peu et n'a pas été en mesure d'obtenir la fenêtre parent pour être en mesure de définir les décharger. La seule façon que je pouvais le faire fonctionner, c'était que le script présent dans la fenêtre popup html. La fenêtre pop-up également requis pour le chargement de jQuery. Je n'ai rien à la base, mais je crois que le déchargement est déclenché, essentiellement parce que la fenêtre pop-up est en train d'être déchargé de la portée de la fenêtre parent. Juste une supposition.
Vous devez avoir l'événement onBeforeUnload appeler une méthode pour informer votre gestionnaire.
Voir cette page pour une démo.
http://www.4guysfromrolla.com/demos/OnBeforeUnloadDemo1.htm
Utilisation de la fenêtre.onUnload
Il y a un petit fourre-je mentionner dans le rapport à la précédente mentionne de onunload basé sur mon expérience précédente:
Opera 9.0.x-9.2.x ne fonctionne fenêtre.onUnload si l'utilisateur quitte la page. Si l'utilisateur au lieu de fermer la fenêtre, l'événement se déclenche jamais. Je crois que cela a été fait pour lutter contre l'auto-rechargement popup problème (où une fenêtre pouvait s'ouvrir de lui-même sur la page de proximité).
Cela a probablement persisté à Opera 9.5.x. D'autres navigateurs peuvent également mettre en œuvre, mais je ne crois pas IE ou Firefox ne.
De ce que j'ai vérifié le jQuery décharger est juste un wrapper pour la fonction native. Je peux me tromper car je n'ai pas creusé si profond.
Cet exemple a fonctionné pour moi.
Rappelez-vous que certains navigateurs bloquent la fenêtre.ouvrez les demandes sur les décharger, c'est à dire par exemple.