[Javascript] detecter l'evenement fermeture

Résolu/Fermé
joe - 29 mars 2007 à 13:12
 fistian - 24 mars 2015 à 15:27
salut
comment on peux executé un script avant la fermeture du fenetre : apres que l'utisateur clic sur X de fermeture.
Merci d'avance
A voir également:

9 réponses

le_joker_fou Messages postés 764 Date d'inscription mercredi 5 août 2009 Statut Membre Dernière intervention 7 août 2014 239
24 déc. 2010 à 13:58
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.
53
<script type="text/javascript">
function toto()
{
alert('toto');
}
window.onbeforeunload = function (){toto()};
</script>
11
Utilisateur anonyme
29 mars 2007 à 19:05
Salut!

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

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


;-)
HackTrack
10
La fonction "onUnload" s'execute lorsqu'on "quitte" la page courante. Donc également lorsqu'on change de page...
10

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
goava Messages postés 41 Date d'inscription jeudi 20 juillet 2006 Statut Membre Dernière intervention 20 avril 2013 4
Modifié par goava le 2/10/2012 à 03:47
Bonjour

Je m'excuse de déterrer ce vieux topic mais j'ai récemment testé le petit script proposé ci-dessus par le joker fou qui ma fois fonctionne bien avec la fonction alert() mais en ce qui concerne le fait de faire une redirection, j'en doute...???

Je cite : (On peut aussi appeler un script avec => location.href="http://monsite.fr/script.php").

J'ai bien essayé comme proposé, mais rien n'y fait.

Je soulève donc à nouveaux la sempiternel polémique :

Mais comment donc faire une redirection vers un fichier php(Vers un script de déconnexion par exemple...) à la fermeture soudaine de la page si le visiteur à oublié de se déconnecter volontairement.

J'ai plusieurs fois déjà demandé de l'aide à ce propos sur d'autres forums mais n'ai reçu que de vagues réponses qui n'apportaient pas vraiment une réel solution. (si il en existe une...???)

Merci d'avance à celui qui pourra aider dans ce sens là.
4
BRAVO le_joker_fou
2
:) !
var y;var x;
$("#body").mouseleave(function(event){x=0;y=0;});
$("#body").mouseenter(function(event){x=1;y=1;});
window.onbeforeunload = closeIt;
function closeIt(event){if(!x && !y){/*action avant fermeture*/}}
2
fauvi Messages postés 2 Date d'inscription lundi 16 février 2015 Statut Membre Dernière intervention 17 août 2015 1
16 févr. 2015 à 19:59
Bonjour tout le monde...
je suis novice en php et j'ai peu de connaissances en javascript.
Les scripts proposés (que j'arrive à comprendre !) m'ont l'air bien et quand je les teste avec Mozilla Firefox 35.0.1, ça ne marche pas, sauf si je le test avec Chrome... est-ce normal ??
est-ce parce que je me suis trompé dans le code ?? => Faut-il le placer dans le head ?
-------------------------------------------------------------------------
var y;var x;
$("#body").mouseleave(function(event){x=0;y=0;});
$("#body").mouseenter(function(event){x=1;y=1;});
window.onbeforeunload = closeIt;
function closeIt(event){if(!x && !y){/*action avant fermeture*/}}
-------------------------------------------------------------------------
Quelqu'un pourrait-il me donner plus d'infos sur ce code ?? (explications de chaque action...)
!! Merci !!
1
je ne plus fermées ma page winbows live hotail et donc plus se de deriere
-7
lel ou la cuisse ?
1