2009-08-26 7 views
2

Est-il possible d'appeler un JS lorsque l'utilisateur ferme une fenêtre?Appelez du code JavaScript lorsque l'utilisateur ferme une fenêtre (popup)

J'ai recherché des gestionnaires d'événements JS et trouvé seulement onunload, qui appelle le script chaque fois que l'utilisateur quitte une page, ne fermant pas nécessairement la fenêtre.

L'utilisation prévue est d'appeler un script AJAX qui désactive quelques sessions pertinentes à la fenêtre contextuelle. Il peut ou peut ne pas être un meilleur moyen d'atteindre cet objectif?

J'ai trouvé this DevShed thread dans lequel il est indiqué que cela est possible via JS, mais cela n'explique pas exactement comment appeler le script.

Malheureusement, la plupart des recherches de Google pour une solution à cette fenêtre d'affichage.close, ce qui est effectivement le contraire de ce dont j'ai besoin!

Répondre

5

Le code suivant fonctionne dans Firefox, IE 8, et "Google Chrome".

Dans la la fenêtre d'ouverture

<script src="http://ajax.googleapis.com/ajax/libs/mootools/1.2.3/mootools-yui-compressed.js"></script> 
<script> 
function on_popup_close(){ 
    //put your code here 
    alert('it closed'); 
} 
</script> 

Dans le menu contextuel

<script> 
function inform_parent(){ 
    opener.on_popup_close(); 
} 

window.onbeforeunload = inform_parent; 
</script> 

La première ligne dans le code de la fenêtre d'ouverture peut être votre framework préféré qui implémente l'opérateur signe dollar.

See my demo here

+0

Appréciez le script de démo que vous avez créé, mais il souffre encore du problème d'origine: naviguer entre les pages de la fenêtre informe le parent que la fenêtre est fermée, alors que ce n'est pas forcément le cas. – bcmcfc

+0

La partie script src ci-dessus n'est pas nécessaire pour que cela fonctionne. Mais de toute façon merci pour la réponse. –

1

vous pouvez vérifier à partir de la fenêtre parent si la fenêtre enfant existe encore (par exemple vérifier toutes les 100 ms environ) et script de lancement sinon ...

+0

Vous auriez probablement envie de vérifier l'URL de la page pop-up ainsi, pour voir si elles avaient navigué loin de votre domaine/app. – Ian

0

Jetez un oeil à la propriété window.opener. Sauf pour IE, il a plutôt bon support. Vous pouvez l'utiliser pour appeler des fonctions javascript dans la fenêtre de votre parent avant le window.close().

+0

Je ne suis pas window.clos() dans mon popup, j'ai juste besoin de gérer la situation où l'utilisateur clique sur la croix! – bcmcfc

+0

ah, mais alors vous devriez être en mesure d'utiliser l'événement de déchargement, non? –

+0

décharger semble être déclenché lorsque l'utilisateur navigue de page en page dans le popup, plutôt que quand ils ferment la fenêtre.Donc, cela causerait plus de problèmes que cela résoudrait malheureusement. – bcmcfc

0

Aucune idée de savoir si cela fonctionne en pratique, mais si le problème est de naviguer vers des pages internes, pourquoi ne pas définir une variable globale d'un type à chaque fois qu'un lien est cliqué dans page, et vérifier cette onunload?

Quelque chose comme (excusez le jQuery, je suis extrêmement paresseux):

INTERNAL_CLICKED = false; 

$("a").click(function() { 
    INTERNAL_CLICKED = true; 
}); 

window.onunload = function() { 
    if(!INTERNAL_CLICKED) { 
     // perform window unload code 
    } 
} 

Réitérer, complètement non testé, mais qui sait - il peut bien juste pour vous. Bien que, je m'en méfie, ça va probablement se déclencher aussi.

0

Salut Vous pouvez utiliser la fonction suivante sur l'événement onbeforeunload tiré par window juste avant la window.close

window.onbeforeunload = function() { 
    // stuff do do before the window is unloaded here. 
} 

faites-moi savoir si elle ne résout pas ur probelm

Questions connexes