102 votes

Désactiver le bouton de retour du navigateur

Comment désactiver le bouton RETOUR du navigateur (sur tous les navigateurs) ?

94 votes

Vous ne possédez pas les ordinateurs de vos utilisateurs ni leurs navigateurs.

47 votes

+1 Parce que bien que je sois d'accord que désactiver le bouton de retour des navigateurs est une 'mauvaise pratique', je ne vois aucune raison de voter négativement pour la question elle-même, répondre et expliquer pourquoi est la meilleure façon de faire à mon avis.

45 votes

Pourquoi sommes-nous hostiles à cette question? Pour tout ce que nous savons, la personne posant cette question sait déjà que c'est une mauvaise pratique en matière d'utilisation, mais suit simplement les exigences, ou peut-être veut-elle simplement apprendre quelque chose. Pourquoi ne pas simplement prétendre que c'est une question hypothétique, et répondre comment nous le ferions si nous devions faire ce genre de chose?

61voto

Jonathan Fingland Points 26224

Ne désactivez pas le comportement du navigateur attendu.

Faites en sorte que vos pages gèrent la possibilité pour les utilisateurs de revenir en arrière d'une ou deux pages ; ne cherchez pas à entraver leur logiciel.

7 votes

Merci mec, la chose est que si vous construisez une application AJAX, le compromis coût-avantage entre désactiver le bouton de retour, ou passer à travers votre application et travailler sur l'action de retour appropriée pour chaque scénario possible, peut tendre vers la désactivation du bouton de retour comme l'option la plus attrayante des deux.

0 votes

Je suis d'accord avec Jonathan, surtout avec le déluge de publicités de logiciels malveillants qui redirigent actuellement sur Internet. Ils abusent déjà du système d'alerte pour rendre difficile la sortie de leurs pages sans leur donner la possibilité de vous verrouiller sur leur page.

0 votes

"Désactiver" le bouton de retour est un cas d'utilisation très courant : pour toute application nécessitant une authentification/sécurité, vous ne voulez pas qu'un utilisateur puisse appuyer sur le bouton de retour et voir des pages qui ont été vues par un autre utilisateur connecté. Vous verrez ce comportement dans n'importe quelle application web qui nécessite une connexion, par exemple ameritrade.com. Malheureusement, stackoverflow.com n'est pas infaillible à ce sujet. Si vous vous déconnectez et commencez à appuyer sur le bouton de retour, les premières pages de la déconnexion semblent être protégées, mais vous pourrez voir le contenu accédé par l'utilisateur connecté :(

47voto

Yossi Shasho Points 1209

J'ai trouvé une petite astuce qui désactive le bouton de retour en utilisant JavaScript. Je l'ai testé sur chrome 10, firefox 3.6 et IE9 :

Page sans titre

function changeHashOnLoad() {
     window.location.href += "#";
     setTimeout("changeHashAgain()", "50"); 
}

function changeHashAgain() {
  window.location.href += "1";
}

var storedHash = window.location.hash;
window.setInterval(function () {
    if (window.location.hash != storedHash) {
         window.location.hash = storedHash;
    }
}, 50);

Essayez d'appuyer sur le bouton de retour !

Que fait-il ?

Des Commentaires :

Ce script tire parti du fait que les navigateurs considèrent tout ce qui vient après le signe "#" dans l'URL comme faisant partie de l'historique de navigation. Ce qu'il fait, c'est ceci : Lorsque la page se charge, "#1" est ajouté à l'URL. Après 50ms, le "1" est supprimé. Lorsque l'utilisateur clique sur "retour", le navigateur change l'URL pour revenir à ce qu'elle était avant que le "1" soit supprimé, MAIS - c'est la même page web, donc le navigateur n'a pas besoin de recharger la page. – Yossi Shasho

1 votes

Il semble que ce script ajoute "#" à l'URL lorsque la page se charge et, toutes les 50 ms, il ajoute un 1 à l'URL.

7 votes

Ce script exploite le fait que les navigateurs considèrent tout ce qui se trouve après le signe "#" dans l'URL comme faisant partie de l'historique de navigation. Ce qu'il fait, c'est ceci : lorsque la page se charge, "#1" est ajouté à l'URL. Après 50ms, le "1" est supprimé. Lorsque l'utilisateur clique sur "retour", le navigateur rétablit l'URL telle qu'elle était avant la suppression du "1", MAIS - c'est la même page web, donc le navigateur n'a pas besoin de recharger la page.

1 votes

Notez que l'URL change deux fois : nous faisons cela uniquement pour dissimuler l'implémentation, afin que personne ne voit que nous avons ajouté "1". En réalité, lorsque l'utilisateur clique sur retour, la page ré-ajoute "#1" pendant un moment et le supprime à nouveau. BTW - cela n'a pas besoin d'être "1", cela peut être n'importe quelle chaîne de caractères.

34voto

thomasrutter Points 42905

D'autres ont adopté l'approche de dire "ne faites pas cela", mais cela ne répond pas vraiment à la question de l'auteur. Supposons simplement que tout le monde sait que c'est une mauvaise idée, mais nous sommes curieux de savoir comment c'est fait malgré tout...

Vous ne pouvez pas désactiver le bouton de retour sur le navigateur de l'utilisateur, mais vous pouvez faire en sorte que votre application se casse (affiche un message d'erreur, obligeant l'utilisateur à recommencer) si l'utilisateur revient en arrière.

Une méthode que j'ai vue pour faire cela est de passer un jeton sur chaque URL dans l'application, et dans chaque formulaire. Le jeton est régénéré sur chaque page, et une fois que l'utilisateur charge une nouvelle page, tous les jetons des pages précédentes sont invalidés.

Lorsque l'utilisateur charge une page, la page ne s'affiche que si le jeton correct (qui a été transmis à tous les liens/formulaires sur la page précédente) lui a été passé.

L'application de banque en ligne que ma banque propose est ainsi. Si vous utilisez le bouton de retour, aucun autre lien ne fonctionnera et aucun rechargement de page ne pourra être effectué - à la place vous verrez un message vous indiquant que vous ne pouvez pas revenir en arrière, et vous devrez recommencer.

1 votes

Ma banque adopte une approche différente - elle termine entièrement la session. Utiliser le bouton de retour équivaut à se déconnecter.

0 votes

Cela ressemble à la même approche. Ils détectent que vous êtes revenu en arrière et avez déclenché une condition d'erreur.

0 votes

Aussi joomla travaille autour de la solution de jetons, un jeton est généré par chaque page et chaque formulaire, en fait il y a quelques problèmes concernant cette pratique, comme "quand un utilisateur reste trop longtemps sur une page et que son jeton expire"

27voto

RSolberg Points 17001

Cette question est très similaire à celle-ci...

Vous devez forcer l'expiration du cache pour que cela fonctionne. Placez le code suivant dans le code derrière votre page.

Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)

15 votes

Notez que rendre la page non mise en cache ne permet pas d'atteindre ce que l'OP voulait : désactiver la possibilité de visiter les pages en utilisant le bouton retour. Même si un navigateur obéit à la directive no-cache lors de l'utilisation du bouton retour (ce que les navigateurs ne sont pas obligés de faire à ma connaissance), ils fournissent toujours un moyen de recharger cette page (généralement après avoir affiché une boîte de dialogue d'avertissement). Donc, si vous ne voulez vraiment pas que vos utilisateurs reviennent sur cette page, cela pourrait être pire, car la demande de cette page devra se rendre jusqu'au serveur d'origine. Vous aurez besoin de quelque chose côté serveur pour détecter que la page a été revisitée. Les en-têtes peuvent être ignorées.

0 votes

Désactiver le bouton retour est un cas d'utilisation très courant : pour toute application nécessitant une authentification/sécurité, vous ne voulez pas qu'un utilisateur puisse appuyer sur le bouton retour et afficher des pages vues par un autre utilisateur connecté. Vous verrez ce comportement dans toute application web nécessitant une connexion, par exemple ameritrade.com. Malheureusement, stackoverflow.com n'est pas infaillible à cela. Si vous vous déconnectez et commencez à appuyer sur le bouton retour, les premières pages de la déconnexion semblent être protégées, mais vous pourrez afficher le contenu consulté par l'utilisateur connecté :(

10voto

Menno Points 327

Condamner la question sans connaître le contexte est un peu sévère. Par exemple, j'aimerais savoir la bonne façon de faire ceci : actuellement, je mène une expérience de psychologie en ligne, et parfois les participants appuient sur le bouton de retour (retour arrière ou 'suppr' sur un mac) au lieu de la touche entrée, par accident. Cela peut potentiellement perturber l'expérience et donc ruiner les données (ce qui n'est heureusement pas encore arrivé). C'est évidemment un cas où l'entrée doit être limitée.

Of course, je conviens que dans la règle, c'est une très mauvaise idée... mais cela a déjà été clairement souligné à plusieurs reprises.

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