Désactivation du bouton Précédent sur le navigateur [fermé]
je suis en train d'écrire une application qui si l'utilisateur hits en arrière, il peut renvoyer la même information 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?
13 réponses
ce n'est pas possible, malheureusement. Cependant, considérez votre modèle de navigation d'applications. Utilisez-vous Post/Redirect/Get PRG Model? http://en.wikipedia.org/wiki/Post/Redirect/Get ?
Ce modèle est plus facile à utiliser que le modèle Postback.
vous ne devriez pas.
, Vous pouvez joindre un script à l'événement onbeforeunload d'une page et de confirmer avec l'utilisateur, c'est ce qu'ils veulent faire; et vous pouvez aller un peu plus loin et essayer à désactiver mais bien sûr, cela ne fonctionne que pour les utilisateurs qui ont javascript activé. Au lieu de cela, regardez la réécriture de l'application de sorte que vous ne commettez pas les transactions sur chaque page soumettre, mais seulement à la fin du processus.
je vous recommande vivement d'aller à des longueurs héroïques pour éviter de briser le bouton arrière, il est une façon de feu sûr d'aliéner vos utilisateurs et même fait à n ° 1 sur Jacob Neilsen 10 erreurs de conception Web en 1999 .
peut-être pourriez-vous envisager plutôt de poser la question: "Comment éviter de casser le bouton arrière pour ?"
si la réponse de Scott est proche de la note, pensez à changer votre flux pour le PRG modèle. Si c'est autre chose, donnez un peu plus de détails et voyez comment nous pouvons vous aider.
j'ai trouvé un petit hack qui désactive le bouton arrière en utilisant JavaScript. J'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>
la meilleure option est de ne pas dépendre des postbacks pour contrôler le débit, cependant si vous êtes coincé avec elle (pour le moment)
, 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 qu'il ne fonctionnera pas sur tous les navigateurs, mais alors vous pouvez introduire un contrôle 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;
}
qui résoudra le problème dans une certaine mesure, le Code n'est pas coché -- seulement à titre d'exemple..
il est possible de désactiver le bouton back dans tous les navigateurs principaux. Il utilise juste des valeurs de hachage pour désactiver complètement le bouton arrière. Mettre les 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>
Voici un post précédent sur elle: empêcher L'Utilisation du bouton arrière (en IE)
peu importe ce que vous venez avec pour désactiver le bouton arrière pourrait ne pas arrêter le bouton arrière dans les navigateurs futurs.
si c'est tard dans le cycle de développement je vous suggère d'essayer quelques suggestions ci-dessus, mais quand vous obtenez le temps vous devriez structurer votre flux de sorte que le bouton arrière n'interfère pas avec la logique de votre site, il ramène simplement l'utilisateur à la page précédente comme ils s'attendent à ce qu'il fasse.
il est vrai qu'une validation appropriée doit être ajoutée pour s'assurer que les données dupliquées ne font pas tout foirer. Cependant, comme dans mon cas, je n'ai pas le contrôle total des données puisque j'utilise une API tierce partie après mon formulaire. Donc j'ai utilisé ce
history.go(+1);
cela enverra l'utilisateur vers le" reçu "qui est censé venir après la page" Paiement "s'ils essaient de revenir à la page" Paiement " (en donnant juste un paiement par exemple). Utilisez avec parcimonie, bien que
vous pouvez afficher les données sur chaque formulaire dans une nouvelle fenêtre. Cela désactivera le bouton arrière de chaque fenêtre, mais sans javascript, il pourrait être difficile de forcer la fermeture de l'ancienne.
4 gars de Rolla ont écrit cet article sur la désactivation du bouton arrière il y a longtemps (dans une galaxie très lointaine): http://www.4guysfromrolla.com/webtech/111500-1.shtml
j'ai pu accomplir ceci en utilisant:
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();
quand j'ai utilisé Response.Cache.SetCacheability (HttpCacheability.NoCache); cela m'empêchait de télécharger des fichiers de bureau.
trouver le lien
désactiver la fonctionnalité du bouton de retour du navigateur en utilisant JavaScript dans asp.net | ASP.Net désactiver le bouton Retour du navigateur (en utilisant javascript)
http://www.aspdotnet-suresh.com/2011/11/disable-browser-back-button.html