Je souhaite contrôler la facilité avec laquelle les utilisateurs peuvent quitter mon application. Maintenant, je sais que je ne peux pas le faire complètement; C'est pour ça que les emplois cron sont. Mais j'aimerais attraper autant de cas que possible.Est-ce que OnBeforeUnload peut exécuter du code s'il accepte la boîte de dialogue?
Je pensais, je pourrais utiliser onBeforeUnload
pour afficher la boîte de dialogue, les avertissant de quitter et leur demandant de cliquer s'il vous plaît sur le bouton Quitter à la place. Mais alors j'ai découvert qu'il pourrait être possible d'exécuter un appel AJAX synchrone (heh) lorsque onBeforeUnload
est appelé; l'avantage d'être synchrone est que le navigateur attendra qu'il se termine avant de continuer, si je comprends bien. De cette façon, je pourrais dire au serveur que je me déconnecte en fermant la fenêtre. Et parce que c'est dans onBeforeUnload
et non onUnload
, toutes les données sont toujours existantes et l'appel sera envoyé.
Ma question est, est-il possible de combiner ces? Je voudrais un popup les avertissant de partir, et s'ils continuent à vouloir partir, envoyer le message qu'ils partent en fait. De la façon dont je le comprends, je ne peux pas le faire; Je peux le faire:
- Envoyer le message que
- Mettre en place la boîte de dialogue ne
- Envoyer le message et mis la boîte de dialogue
... mais je ne peux pas envoyer le message conditionnellement si ils ont accepté le dialogue, non? Ma compréhension est que quand ils cliquent sur "OK, je veux partir", il déclenche immédiatement onUnload
, et à ce moment-là il est trop tard. Et # 3 ci-dessus n'est pas utile parce que je ne veux pas envoyer le message qu'ils se déconnectent, puis leur demander d'annuler la boîte de dialogue et de rester sur la page. Puis-je avoir mon gâteau et le manger aussi? Puis-je leur demander s'ils veulent partir et, si oui, envoyer le message?
Ne comptez pas sur 'onbeforeunload' pour ces choses, ce n'est pas sûr: cet événement non-standard n'est pas supporté par Opera et ne se déclenche donc jamais. De plus, tuer un navigateur en utilisant un gestionnaire de tâches ou quelque chose (commande * nix 'kill') ne déclenche pas non plus cet événement. –
Comme je l'ai dit au début de mon article, je n'avais pas l'intention de * compter * sur le navigateur pour quoi que ce soit. C'est ce que les emplois cron côté serveur sont: attraper fermetures disgracieuses. J'espérais faire en sorte que cela soit aussi gracieux que possible et attraper autant de situations que possible. – Andrew
Ah, j'ai raté cette partie. –