de la fenêtre.onbeforeunload feu à plusieurs reprises
Juste parce que vous ne voyez pas l'utiliser pour une fonction ne signifie pas qu'il n'est pas utile.
La Pile réseau Exchange, GMail, Grooveshark, Yahoo! Mail et Hotmail utiliser le onbeforeunload invite à éviter/avertir les utilisateurs qu'ils sont de quitter une page après qu'ils ont commencé le montage de quelque chose. Ah oui, près de chaque programme de bureau qui accepte saveable utilisateur-données d'entrée utilise cette invite de l'utilisateur avant de quitter UX modèle.
J'ai une fonction qui se comporte de façon similaire à celui-ci:
window.onbeforeunload = function(){
//only prompt if the flag has been set...
if(promptBeforeLeaving === true){
return "Are you sure you want to leave this page?";
}
}
Lorsqu'un utilisateur tente quitte la page, le navigateur présente avec la possibilité de partir ou de rester sur la page. Si l'utilisateur sélectionne le "Laissez cette option page", puis ils ont rapidement cliquez sur un lien de nouveau avant que la page ne se décharge complètement la boîte de dialogue déclenche à nouveau.
Sont-il infaillible de solutions à ce problème?
Note: ce qui suit ne sera PAS la solution:
var alreadyPrompted = false;
window.onbeforeunload = function(){
//only prompt if the flag has been set...
if(promptBeforeLeaving === true && alreadyPrompted === false){
alreadyPrompted = true;
return "Are you sure you want to leave this page?";
}
}
parce que l'utilisateur peut sélectionner le "Rester sur la page" option qui serait la cause de l'avenir onbeforeunload
s arrêter de travailler.
oh ye de peu de connaissances. Je vous mets au défi de commencer à répondre à cette question, puis quittez la page.
J'ai du mal à penser à quelque chose de mieux que d'utiliser un drapeau, mais aussi d'avoir une "mousemove" gestionnaire sur le
<body>
ou quelque chose qui l'annule.J'ai essayé, mais le javascript s'exécute à la fois pour "Rester sur cette Page", puis "Quitter la Page" événements".
pour la citation. "oh ye de peu de connaissances"
OriginalL'auteur David Murdoch | 2010-11-08
Vous devez vous connecter pour publier un commentaire.
Je pense que vous pourriez faire cela avec un timer (
setInterval
), qui commence dans laonbeforeunload
de rappel. Exécution de Javascript sera en pause lorsque la boîte de dialogue de confirmation est en place, puis si l'utilisateur annule la temporisation de la fonction peut réinitialiser lealreadyPrompted
variable à false, et claire de l'intervalle.Juste une idée.
Ok j'ai fait un test rapide basé sur votre commentaire.
Entre les deux rappels
#counter
ne l'ai jamais supérieur à 2 (ms). Il semble que l'utilisation de ces deux rappels en parallèle vous offre tout ce dont vous avez besoin.MODIFIER réponse au commentaire:
Fermer. C'est ce que je pensais
alreadyPrompted
drapeau serait remis à zéro dans les deux cas. Maintenant, le réglage de l'intervalle de délai d'attente pour une valeur relativement élevée (de 2 secondes, peut-être?) pour permettre la page décharger sur des connexions lentes devrait fonctionner dans la plupart des cas...mais ce n'est vraiment pas une solution parfaite. Si je ne finissent par aller avec cela, je vais accepter votre réponse. Merci! 🙂C'est tout ce que vous pouvez faire. Il n'est pas possible de dire avec certitude quel bouton l'utilisateur a sélectionné après
onbeforeunload
retourne.Mais bobince, j'ai vraiment, vraiment envie. :-D. je me demande si je peux le faire avec un iframe certains comment. BRB avec mes conclusions.
Ne pouvais pas obtenir un créé dynamiquement iframe onbeforeunload à exécuter. oh bien.
Ruddell. ceci la mise en œuvre que vous pensiez?
OriginalL'auteur Josiah Ruddell
J'en viens à les réponses ci-dessus en un facile à utiliser la fonction:
De registre:
Pour annuler l'inscription d'utilisation:
Espère que cela aide ..
OriginalL'auteur kofifus