383 votes

Détecter la fermeture du navigateur ou de l'onglet

Existe-t-il un code JavaScript/jQuery multi-navigateur permettant de détecter si le navigateur ou un onglet du navigateur est fermé, mais pas en raison d'un clic sur un lien ?

1 votes

Voir ma réponse à cette question : stackoverflow.com/questions/3735198/

0 votes

0 votes

Utilisez sessionStorage Propriété, il expirera une fois que le navigateur sera fermé. w3schools.com/jsref/prop_win_sessionstorage.asp

328voto

jAndy Points 93076

Si je vous comprends bien, vous voulez savoir quand un onglet/une fenêtre est effectivement fermé(e). Eh bien, AFAIK la seule façon de Javascript pour détecter que ce genre de choses sont onunload & onbeforeunload événements.

Malheureusement (ou heureusement ?), ces événements sont également déclenchés lorsque vous quittez un site sur un link ou le bouton retour de votre navigateur. C'est donc la meilleure réponse que je puisse donner, je ne pense pas que l'on puisse détecter nativement un pur close en Javascript. Corrigez-moi si je me trompe.

45 votes

Correct. Vous pouvez seulement détecter quand la page est déchargée, pas quand la fenêtre est fermée. De plus, l'option onbeforeunload n'est pas standard, elle n'est donc pas prise en charge par tous les navigateurs.

8 votes

Je voulais également utiliser la fonction "à la fermeture", mais j'ai remarqué que mes utilisateurs rafraîchissent parfois l'écran en appuyant sur F5. Comme mes gestionnaires "on close" sont invoqués lors d'un tel rafraîchissement, cela signifie que je ne peux pas l'utiliser de la manière dont j'en avais besoin (qui était un véritable "fermeture de l'onglet ou de la fenêtre")... Bon sang, il nous faut un nouveau modèle d'événement pour tout cela !

1 votes

Ne fonctionne plus sur chrome/opera... chromestatus.com/feature/5349061406228480

160voto

mohamed-stark Points 617

De Documentation MDN

Pour certaines raisons, les navigateurs basés sur Webkit ne suivent pas la spécification de la boîte de dialogue. Un exemple de fonctionnement presque croisé serait proche de l'exemple ci-dessous.

window.addEventListener("beforeunload", function (e) {
  var confirmationMessage = "\o/";

  (e || window.event).returnValue = confirmationMessage; //Gecko + IE
  return confirmationMessage;                            //Webkit, Safari, Chrome
});

Cet exemple permet de gérer tous les navigateurs.

2 votes

C'est la seule solution qui a fonctionné pour mon navigateur Chrome. Je n'en ai pas essayé d'autres.

4 votes

Oui, j'ai essayé beaucoup de solutions et j'en suis arrivé à ceci à la fin, une combinaison pour les meilleures réponses, et je l'ai testé sur tous les navigateurs.

1 votes

Cette méthode ne fonctionne pas parfaitement à la fermeture de l'onglet lorsque vous utilisez firefox (>= ver. 44) avec un seul onglet ouvert.

62voto

user1760979 Points 208

Une solution simple

window.onbeforeunload = function () {
    return "Do you really want to close?";
};

11 votes

Quel genre de sorcellerie est-ce ? (y) est-ce que ça marche sur tous les navigateurs ? ça marche très bien sur chrome

10 votes

Il se déclenche lorsque vous rafraîchissez la page. c'est mon seul problème.

8 votes

Cette solution ne fonctionne plus sur Firefox et Chrome.

23voto

jyothis Points 95
<body onbeforeunload="ConfirmClose()" onunload="HandleOnClose()">

var myclose = false;

function ConfirmClose()
{
    if (event.clientY < 0)
    {
        event.returnValue = 'You have closed the browser. Do you want to logout from your application?';
        setTimeout('myclose=false',10);
        myclose=true;
    }
}

function HandleOnClose()
{
    if (myclose==true) 
    {
        //the url of your logout page which invalidate session on logout 
        location.replace('/contextpath/j_spring_security_logout') ;
    }   
}

/Ceci fonctionne dans IE7, si vous fermez un onglet ou si votre navigateur ne comporte qu'un seul onglet.

2 votes

Oui. mais pour les navigateurs à onglets multiples comme ie8, firefox. il y a un problème en utilisant ceci ?

0 votes

Il s'avère qu'en utilisant ce code dans IE9, ce message s'affiche lorsque l'utilisateur clique sur les boutons Précédent, Suivant ou Actualiser avec sa souris.

0 votes

Je vous signale que nous avons mis en œuvre une solution similaire en 2007. Cette solution ne fonctionne plus dans IE9 depuis une semaine environ. Elle a cessé de fonctionner (ou n'a peut-être jamais fonctionné) dans les navigateurs à onglets il y a longtemps.

6voto

Poonam Bhatt Points 2132
$(window).unload( function () { alert("Bye now!"); } );

10 votes

Cela ne fonctionne pas sur Firefox ou Chrome. Essayez beforeunload si vous voulez afficher une alerte. Comme ceci : $(window).on('beforeunload', function(){ alert ('Bye now')});

6 votes

Selon la documentation de jQuery "La plupart des navigateurs ignorent les appels à alert(), confirm() et prompt()". api.jquery.com/unload

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X