web-dev-qa-db-fra.com

Désactiver le bouton arrière sur le navigateur

J'écris une application que si l'utilisateur frappe, il peut renvoyer les mêmes informations et gâcher le flux et l'intégrité des données. Comment puis-je le désactiver pour les utilisateurs qui sont avec et sans JavaScript?

31
Haoest

Ce n'est pas possible, malheureusement. Cependant, considérez votre modèle de navigation des applications. Utilisez-vous le modèle post/redirect/obtenez le modèle PRG? http://fr.wikipedia.org/wiki/post/redirect/get ?

Ce modèle est plus adapté au bouton de retour que le modèle de publication.

76
Scott Hanselman

Vous ne devriez pas.

Vous pouvez attacher un script à l'événement OnBeForeRunload de page et confirmez avec l'utilisateur qui est ce qu'ils veulent faire; et vous pouvez aller un peu plus loin et Essayez à Désactivez-le mais bien sûr, cela ne fonctionnera que pour les utilisateurs qui ont JavaScript au. Au lieu de cela, examinez la réécriture de l'application afin que vous ne commetez pas de transactions sur chaque page Soumettre, mais uniquement à la fin du processus.

12
blowdart

Je vous exhorte fortement à vous rendre à des longueurs héroïques pour éviter de casser le bouton arrière, c'est un chemin d'incendie d'aliéner vos utilisateurs et même de le rendre n ° 1 sur top 10 les 10 top 10 des conceptions Web de Jacob Neilsen en 1999 =.

Peut-être que vous pourriez envisager de poser plutôt la question suivante: "Comment éviter de casser le bouton arrière pour <insérer votre scénario ici>?"

Si la réponse de Scott frappe près de la marque, envisagez de changer votre flux vers le modèle PRG. Si c'est autre chose, alors donnez un peu plus de détails et voyez comment nous pouvons aider.

8
Mike Tunnicliffe

J'ai proposé un petit piratage qui désactive le bouton arrière à l'aide de JavaScript. Je l'ai vérifié sur chrome 10, Firefox 3.6 et IE9:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<title>Untitled Page</title>
<script type = "text/javascript" >
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);


</script>
</head>
<body onload="changeHashOnLoad(); ">
Try to hit back!
</body>
</html>
7
Yossi Shasho

Meilleure option ne doit pas dépendre des post-packs pour contrôler le flux, cependant, si vous êtes coincé avec celui-ci (pour l'instant)

vous pouvez utiliser quelque chose comme ceci:

  Response.Cache.SetCacheability(HttpCacheability.NoCache);
  Response.Cache.SetExpires(Now.AddSeconds(-1));
  Response.Cache.SetNoStore();
  Response.AppendHeader("Pragma", "no-cache");

Bientôt, vous constaterez que cela ne fonctionnera pas sur tous les navigateurs, mais vous pouvez alors introduire un chèque dans votre code comme:

 if (Page.IsPostBack)
 {
        if (pageIsExpired()){
           Response.Redirect("/Some_error_page.htm");
        }
        else {
           var now = Now;
           Session("TimeStamp") = now.ToString();
           ViewState("TimeStamp") = now.ToString();
        }

  private boolean pageIsExpired()
  {
     if (Session("TimeStamp") == null || ViewState("TimeStamp") == null)
        return false;

     if (Session("TimeStamp") == ViewState("TimeStamp"))
        return true;

        return false;
  }

Cela résoudra le problème à une extension, le code n'est pas coché - uniquement à des fins d'exemples.

5
Claus Thomsen

Il est possible de désactiver le bouton arrière dans tous les grands navigateurs. Il utilise simplement des valeurs de hachage pour désactiver complètement le bouton arrière. Il suffit de mettre ces 5 lignes de code dans votre page

 <script>
window.location.hash="no-back-button";
window.location.hash="Again-no-back-button";//for google chrome
window.onhashchange=function(){window.location.hash="no-back-button";}
</script> 

( Description détaillée

4
bugwheels94

Voici un post précédent sur celui-ci : Prévenir l'utilisation du bouton arrière (dans IE IE)

3
kemiller2002

Tout ce que vous proposez pour désactiver le bouton arrière, vous ne pouvez pas arrêter le bouton arrière des navigateurs futurs.

Si vous êtes en retard dans le cycle de développement, je vous suggère d'essayer des suggestions ci-dessus, mais lorsque vous avez le temps de structurer votre flux afin que le bouton arrière n'interfère pas avec la logique de votre site, il est simplement de retourner l'utilisateur à la page précédente comme Ils s'attendent à ce qu'il fasse.

3
Keith

Il est vrai que la validation appropriée doit être ajoutée pour que les données dupliquées ne gâchent pas les choses. Cependant, comme dans mon cas, je ne contrôle pas total des données depuis que j'utilise une API tiers après mon formulaire. Alors j'ai utilisé ceci

history.go(+1);

Cela enverra l'utilisateur à la page "reçu" qui est censé venir après une page "Paiement" si elles essaient de revenir à la page "Paiement" (en donnant un paiement par exemple). Utiliser avec parcimonie, bien que

1
katzmopolitan

Trouver ci-dessous lien

Désactiver la fonctionnalité du bouton Back Backer à l'aide de JavaScript dans ASP.NET | ASP.NET Désactiver le bouton Désactiver le navigateur (à l'aide de JavaScript)

http://www.aspdotnet-suresh.com/2011/11/disable-Browser-back-Button.html

0
Nimmanagottu

Vous pouvez afficher les données sur chaque formulaire à une fenêtre _new. Cela désactivera le bouton Précédent de chaque fenêtre, mais sans JavaScript, il pourrait être difficile de forcer l'ancienne fermée.

0
skamradt

4 Les gars de Rolla ont écrit cet article sur la désactivation de la touche arrière Il y a longtemps (dans une galaxie bien éloignée): http://www.4guysfromrolla.com/wtbtech/111500-1.shtml

0
torial