45 votes

Existe-t-il un moyen d'utiliser window.onbeoneunload sur Mobile Safari pour appareils iOS?

On dirait que Apple a désactivé l'événement window.onbeforeunload pour les appareils iOS (iPhone, iPad, iPod Touch). Malheureusement, je ne trouve aucune documentation expliquant pourquoi cet événement ne fonctionne pas dans Mobile Safari.

Est-ce que quelqu'un sait s'il existe une alternative fiable à cette fonction? Le navigateur Android semble le supporter parfaitement, et l’application de bureau Safari prend également en charge l’événement onbeforeunload sans problème.

19voto

Miquel Points 155

Je vois que c'est une vieille question, mais j'ai récemment fait face à ce problème.

J'utilise document.unload et cela fonctionne très bien dans les navigateurs ios (même si, si vous consultez la documentation Apple, celle-ci semble obsolète et recommande d'utiliser document.pagehide ).

2voto

xavierm02 Points 2255

Si vous en avez vraiment besoin, vous ne pouvez pas simplement obtenir tous les liens, les formes et les objets DOM qui ont un gestionnaire de modifier l'url et le rendre ceux d'attendre jusqu'à ce que vous avez fait ce que vous voulez. Pour les liens, vous obtenez par getElementsByTagName, vérifiez si le href commence avec rien, mais un # et il suffit d'ajouter votre onbeforeunload fonction ajouter onclick (qui sera invoquée devant le href est regardé). De même pour les formes, mais avec onsubmit. Et enfin, pour les éléments de changer le href JavaScript, vous devriez assurez-vous que lorsque vous ajoutez le lsitener que vous appelez votre onbeforeunlaod fonction (ou, si vous utilisez DOM0 ou DOM1 auditeurs, vous pouvez simplement ajouter un peu de classe et ensuite utiliser un script global qui vérifie tous les éléments avec la classe et l'ajoute à l'écouteur d'événement avec une fermeture.

Mais vous devriez normalement être en mesure d'éviter l'utilisation de cet évènement (probablement à l'aide des cookies pour stocker la chose que vous avez voulu envoyer toutes les x secondes et permettant, dans le pire des cas, avoir un coup d'oeil la prochaine fois que l'utilisateur charge une page et, dans le meilleur des cas, être en mesure d'envoyer une requête Ajax à onbeforeunload ou onunload qui, même si elle envoie uniquement les en-têtes http, woudl vous permettre d'obtenir ce que vous voulez).

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