web-dev-qa-db-fra.com

Existe-t-il un moyen de détecter si l'événement de déchargement est causé via une actualisation, le bouton arrière ou la fermeture du navigateur?

Je suis actuellement en train de regarder l'événement "Décharger" d'une fenêtre pour essayer de déterminer comment l'événement "Décharger" a été déclenché, mais j'ai peu de succès. Existe-t-il un moyen de déterminer comment l'événement JavaScript a été déclenché?

  • Page actuelle
  • Bouton arrière (ou naviguer loin de la page)
  • Fermer le navigateur

Je dois essentiellement exécuter du code uniquement lorsque la fenêtre du navigateur est fermée, non rafraîchie ou évacuée.

Objectif : Lorsqu'un client effectue une mise à jour de notre logiciel, la mise à jour redirigera sa première demande Internet à une page d'offre. Il y a un bouton pour une option "Ne pas déranger", mais certains utilisateurs fermeront simplement leur navigateur. Lors de la fermeture du navigateur, j'ai besoin de dupliquer la fonctionnalité "Ne pas déranger", afin que l'utilisateur ne soit plus redirigé vers la page de l'offre. L'attachement simplement à l'événement "Décharger" ne fonctionnera pas en raison des différentes manières de quitter une page.

30
Chris

Non, et s'il y avait, il serait dépendant du navigateur. Quel type de code essayez-vous de courir lorsque l'utilisateur ferme la page? Est-ce de déconner l'utilisateur? Ensuite, l'utilisateur ne serait pas déconnecté si le navigateur se bloque ou la connexion réseau se casse (et probablement pas si l'ordinateur se passe en mode veille/hibernation).

Si c'est à des fins de la déconnexion, vous devriez probablement utiliser une variable de l'horodatage sur le serveur qui se met à jour avec chaque demande (ou utilisez AJAX-Ping) et déconnectez l'utilisateur s'il n'a pas été vu pendant une heure spécifiée.

Mise à jour: trouvé cette réponse ici à Stackoverflow.

15
some

Oui, il y a une solution!

J'ai conçu une solution basée sur ONBEForEunload + ONLOWLOWER Events, Storage HTML5 local et la communication client/serveur. Voir les détails sur https://stackoverflow.com/a/13916847/698168 .

2
Julien Kronegg