J'utilise jQuery pour capturer l'événement de déchargement lorsqu'un utilisateur navigue loin d'une page. Cela fonctionne simplement bien, mais j'ai des données qui doivent être sauvées uniquement dans le cas où l'utilisateur vraiment em> veut partir. Voici ma prise-22. Si je sauvegarde le code trop tôt et que l'utilisateur ne veut pas partir, j'ai gâché l'état du service Web soutenant le code. p> J'ai donc besoin d'accomplir la tâche presque insurmontable d'exécution du code uniquement si la boîte de dialogue "à l'avant-charge" revient true. p> Ce code telle est pop Une boîte de dialogue qui vous demande 'Êtes-vous sûr de vouloir naviguer à l'écart du test de test? et si l'utilisateur clique sur Annuler empêchera l'utilisateur de quitter la page. P> Voici une autre pensée: p> Cette seconde méthode n'empêchera pas l'utilisateur De quitter de toute façon, mais dans un cas, il exécutera d'abord du code de sauvegarde, et dans l'autre les déménagera dans le froid. Le problème avec cette approche est que la plupart des navigateurs (à juste titre) empêchent de confirmer des boîtes de lancement dans la fenêtre.Enunload State grâce aux années 90 Les développeurs Web de 90 aveugles aveugles des internautes de navigation médiocres avec elle. P> Un avertissement de non-responsabilité: strong> Je suis bien conscient que nous, dans la communauté du développeur Web, décourage fortement empêchant l'utilisateur de quitter une page et d'exécuter du code en arrière-plan car ils essaient de le faire. Quand je vois des questions telles que, em> "Comment puis-je empêcher un utilisateur de quitter mon site Web vraiment génial" ma réaction de jerk à genoux est typiquement ", ne le faites pas!" Cela dit c'est différent. Ceci est une page spécialisée pour un client particulier et nous en avons besoin comme une mesure de prévention de la panique. Je suis l'un des bons gars, je promets. Je suis un vous. Em> p> p>
3 Réponses :
Essayez d'utiliser les deux événements. Ce dont vous avez besoin est une variable partagée dans la même portée, de ne pas dire une variable globale. comme une portée, je veux dire quelque chose comme OnbeforRunload code> sera tiré avant que la boîte de dialogue apparaisse.
Onunload code> ne sera tiré que si l'utilisateur a cliqué pour échapper à la fenêtre / onglet.
(fonction () { }) (); code> ou tout autre (constructeur ou fonctionnel) fonction. p> p>
Cela fonctionne sur rafraîchir la page, mais lorsque je ferme la fonction ATTAGE AUTO_SAVE n'appelle pas.
Testé et travailler en chrome.
$(window).on('beforeunload', function () { return 'Are you sure you want to navigate away from the Test Runner?'; }); $(window).on('unload', function () { $.ajax({ url: '/default.aspx', async: false }); });
Testé sur Chrome, Firefox et IE10-7 aussi. Vous votant pour le faire correctement, mais je vais accepter des métadages répondant à une légère plus spécifique à ma demande.
vient de rencontrer quels sont vos expériences maintenant p>
Le lien ci-dessous est une bonne référence pour ce problème. P>
https://developer.mozilla.org/en-us/ DOCS / Web / Evénements / Déchargement P>
"Le document est dans un état particulier: p>
Vous ne serez donc pas capable de déclencher quoi que ce soit après la portée avant que cela ne produise aucune valeur de retour p>
Qu'en est-il de sauvegarder les données périodiquement dans de petites rafales / arrière-plan sauvegarder? De cette façon, vous avez juste besoin d'appeler cette sauvegarde () dans le gestionnaire d'événements ci-dessus..similaire à la manière dont Gmail enregistre temporairement le courrier électronique dans le dossier de projet à mesure que vous tapez.
Plus un pour une bonne idée, mais malheureusement pas une option dans ce cas.