Posez votre question Signaler

[Javascript] detecter l'evenement fermeture [Résolu]

joe - Dernière réponse le 24 déc. 2010 à 13:58
salut
comment on peux executé un script avant la fermeture du fenetre : apres que l'utisateur clic sur X de fermeture.
Merci d'avance
Lire la suite 

[Javascript] detecter l'evenement fermeture »

5 réponses
Réponse
+19
moins plus
Alors oui je sais le sujet est vieux MAIS j'ai trouvé la solution et je sens que beaucoup de gens vont l'apprécier.

Je vais essayer d'être le plus claire possible, c'est parti.


Me prenant la tête sur le problème j'ai recherché une solution, tout le monde parlé de onUnload ou onbeforeunload, je suis donc partie sur cette dernière.

<html>
<head>
	<title></title>
	<script language="javascript">
		//Avant la fermeture de la page on appelle notre fonction closeIt
		window.onbeforeunload = closeIt;
		
		//Fonction appelé au moment de fermer la page
		function closeIt()
		{
				alert("On passe")
				// On peut aussi appeler un script avec => location.href="http://monsite.fr/script.php"
		}

	</script>
</head>
<body>
	Page 1 : Have fun xD!!!
	
	<a href="page2.html">test d'un lien</a>
</body>
</html>


MAIS le problème c'est que si on clic sur le lien de la page on quitte la page et donc on appel la fonction définie par l'événement onbeforeunload et c'est mal. J'ai donc rajouté une variable de contrôle ainsi qu'une fonction qui se lance avec l'évènement Onclick placé sur le(s) lien(s) de la page.

<html>
<head>
	<title></title>
	<script language="javascript">
		//Avant la fermeture de la fenêtre on appelle notre fonction closeIt
		window.onbeforeunload = closeIt;
	
		//On instancie la variable de test à vrai
		var allowPrompt = true;
		
		//Fonction qui va regardé si on ferme la page
		function closeIt()
		{
			//Si la variable renvoie vrai c'est qu'on ferme la fenêtre
			if(allowPrompt)
			{
				alert("Ferme")
				// On peut aussi appeler un script avec => location.href="http://monsite.fr/script.php"
			}
			else
			{
				alert("Ouvert")
			}
		}
		
		//Cette fonction et appelé par chaque lien avec l'événement Onclick
		function NoPrompt()
		{
			allowPrompt = false;
		}
	</script>
</head>
<body>
	Page 1 : Have fun xD!!!
	
	<a href="page2.html" Onclick="NoPrompt()">test d'un lien</a>
</body>
</html>


Et ainsi quand on clic sur le lien la fonction NoPrompt() sera appelé, la variable allowPrompt sera passée à false et la fonction closeIt() passera dans l'itération else.

Avec cette solution les seuls événements pouvant provoquer le passage dans l'itération if sont, le clic sur la croix, la fermeture de l'onglet, la combinaison alt+f4 ou tout autre combinaisons fermant la page, MAIS AUSSI l'appui sur la touche F5, la combinaison ctrl + F5 et tout autres combinaisons rafraichissant la page donc qui ne change pas la valeur de allowPrompt.

Je cherche encore une solution pour cela mais je pense qu'avec ce bout de code certain vont déjà être content. Alors si vous trouver une solution pour le refresh des pages je suis preneur.

En espérant vous avoir dépanné, je vous souhaite de JOYEUSES FÊTES. Et oui un geek travail même le 24 décembre :p.
Ajouter un commentaire
Réponse
+8
moins plus
La fonction "onUnload" s'execute lorsqu'on "quitte" la page courante. Donc également lorsqu'on change de page...
Ajouter un commentaire
Réponse
+8
moins plus
<script type="text/javascript">
function toto()
{
alert('toto');
}
window.onbeforeunload = function (){toto()};
</script>
Ajouter un commentaire
Réponse
+7
moins plus
Salut!

En utilisant l'événement 'onunload'.

<html>
  <body onunload="javascript:alert('good bye !');">
    Du contenu
  </body>
</html>


;-)
HackTrack
Ajouter un commentaire
Réponse
-7
moins plus
je ne plus fermées ma page winbows live hotail et donc plus se de deriere
Ajouter un commentaire
Ce document intitulé « [Javascript] detecter l'evenement fermeture » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?