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

- - Dernière réponse :  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
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
767
Date d'inscription
mercredi 5 août 2009
Statut
Membre
Dernière intervention
7 août 2014
220
52
Merci
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.

Dire « Merci » 52

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65107 internautes nous ont dit merci ce mois-ci

11
Merci
<script type="text/javascript">
function toto()
{
alert('toto');
}
window.onbeforeunload = function (){toto()};
</script>
Messages postés
623
Date d'inscription
vendredi 26 juillet 2002
Statut
Membre
Dernière intervention
11 novembre 2012
962
10
Merci
Salut!

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

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


;-)
HackTrack
10
Merci
La fonction "onUnload" s'execute lorsqu'on "quitte" la page courante. Donc également lorsqu'on change de page...
Messages postés
41
Date d'inscription
jeudi 20 juillet 2006
Statut
Membre
Dernière intervention
20 avril 2013
4
4
Merci
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à.
2
Merci
BRAVO le_joker_fou
2
Merci
:) !
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*/}}
Messages postés
2
Date d'inscription
lundi 16 février 2015
Statut
Membre
Dernière intervention
17 août 2015
1
1
Merci
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 !!
-6
Merci
je ne plus fermées ma page winbows live hotail et donc plus se de deriere
lel ou la cuisse ?