Comment empêcher une page Web de s'éloigner en utilisant JavaScript?
javascript
onbeforeunload
Passionné de logiciels
la source
la source
Réponses:
L'utilisation
onunload
vous permet d'afficher des messages, mais n'interrompt pas la navigation (car il est trop tard). Cependant, l'utilisationonbeforeunload
interrompra la navigation:Remarque: Une chaîne vide est renvoyée car les navigateurs plus récents fournissent un message tel que "Toutes les modifications non enregistrées seront perdues" qui ne peut pas être remplacé.
Dans les anciens navigateurs, vous pouviez spécifier le message à afficher dans l'invite:
la source
window.onbeforeunload = function() { return ""; }
Contrairement aux autres méthodes présentées ici, ce bit de code ne fera pas afficher au navigateur un avertissement demandant à l'utilisateur s'il veut partir; au lieu de cela, il exploite la nature événementielle du DOM pour rediriger vers la page actuelle (et donc annuler la navigation) avant que le navigateur n'ait une chance de la décharger de la mémoire.
Comme il fonctionne en court-circuitant directement la navigation, il ne peut pas être utilisé pour empêcher la fermeture de la page; cependant, il peut être utilisé pour désactiver le contournement d'images.
Avertissement: vous ne devriez jamais faire cela. Si une page contient du code de contournement de cadre, veuillez respecter les souhaits de l'auteur.
la source
J'ai fini avec cette version légèrement différente:
Ailleurs, je règle le drapeau sale sur true lorsque le formulaire est sali (ou je veux autrement empêcher la navigation). Cela me permet de contrôler facilement si l'utilisateur reçoit ou non l'invite Confirmer la navigation.
Avec le texte de la réponse sélectionnée, vous voyez des invites redondantes:
la source
undefined
lieu de null. (1) c'est conditionnel (2) il mentionne "sale" la raison légitime la plus courante pour empêcher la navigation et (3) il a une capture d'écran.L'équivalent d'une manière plus moderne et compatible avec les navigateurs, en utilisant les API addEventListener modernes.
Source: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload
la source
event.returnValue
Dans l'exemple d'Ayman, en retournant false, vous empêchez la fenêtre / l'onglet du navigateur de se fermer.
la source
L'équivalent de la réponse acceptée dans jQuery 1.11:
Exemple JSFiddle
La réponse de altCognito a utilisé l'
unload
événement, ce qui arrive trop tard pour que JavaScript abandonne la navigation.la source
Utilisez onunload .
Pour jQuery, je pense que cela fonctionne comme ceci:
la source
unload
événement se déclenche lorsque l'utilisateur quitte la page, contrairement àbeforeunload
ce qui se déclenche juste avant (et peut être annulé)Ce message d'erreur suggéré peut dupliquer le message d'erreur que le navigateur affiche déjà. Dans Chrome, les 2 messages d'erreur similaires s'affichent l'un après l'autre dans la même fenêtre.
Dans Chrome, le texte affiché après le message personnalisé est: "Êtes-vous sûr de vouloir quitter cette page?". Dans Firefox, il n'affiche pas du tout notre message d'erreur personnalisé (mais affiche toujours la boîte de dialogue).
Un message d'erreur plus approprié pourrait être:
Ou style stackoverflow: "Vous avez commencé à écrire ou modifier un article."
la source
Si vous attrapez un bouton Précédent / Suivant du navigateur et que vous ne voulez pas vous en éloigner, vous pouvez utiliser:
Sinon, vous pouvez utiliser l' événement beforeunload , mais le message peut ou non fonctionner dans plusieurs navigateurs et nécessite le renvoi de quelque chose qui force une invite intégrée.
la source