Confirmer la fermeture de la page en javascript avec l'evenement onbeforeunload
Dans certains scénarios, il est bon de demander confirmation à l'utilisateur s'il veut vraiment changer de page et par conséquent perdre toutes les données saisie au niveau d'un formulaire. Cela peut être très pratique lorsque le formulaire nécessite beaucoup de temps.
Pour cela, il existe un événement DOM beforeunload qui, comme son nom l'indique, intervient juste avant le déchargement de la page.
<script type="text/javascript">
window.onbeforeunload = function(e){
return 'En fermant cette page vous perdrez tout.';
}
</script>
La valeur de retour correspond au texte qui est affiché dans le message de confirmation :
Bien sur cet événement n'est absolument pas standardisé, mais aussi étonnant que cela puisse paraitre, Firefox et même Safari (3 beta) reprennent correctement cette fonctionnalité, avec le même texte que IE en plus :
Par contre je n'ai pas réussi à reproduire ce comportement avec Opera, il semble que l'événement beforeunload n'existe pas. D'ailleurs, pour opera l'événement unload de l'objet window ne fonctionne que dans certains cas. Voir cette page pour plus de détails : Event compatibility tables
Si vous utilisez cette astuce, il peut être également intéressant de regarder le timeout de la session, par défaut avec ASP.net, si l'utilisateur est inactif pendant plus de 20 minutes, alors sa session est perdue.