Frage

Ich schreibe eine Anwendung, die, wenn der Benutzer zurückschlägt, möglicherweise dieselben Informationen erneut sendet und den Fluss und die Integrität der Daten beeinträchtigt.Wie deaktiviere ich es für Benutzer mit und ohne aktiviertem Javascript?

War es hilfreich?

Lösung

Es ist nicht möglich, leider. Jedoch Ihre Anwendungen Navigationsmodell berücksichtigen. Sind Sie mit Pfosten- / Redirect / Get PRG Modell? http://en.wikipedia.org/wiki/Post/Redirect/Get ?

Dieses Modell ist mehr zurück Knopf freundlicher als das Postback-Modell.

Andere Tipps

Sie sollten nicht.

Sie können ein Skript zum onbeforeunload Fall einer Seite befestigen und mit dem Benutzer bestätigen, dass das, was sie tun wollen; und man kann ein bisschen weiter gehen und versuchen deaktivieren aber das ist natürlich nur für die Benutzer arbeiten, die Sie Javascript aktiviert haben. Suchen Sie stattdessen auf Umschreiben die App, so dass Sie keine Transaktionen begehen auf jeder Seite einreichen, sondern erst am Ende des Prozesses.

ich Sie dringend auffordern, heroische Anstrengungen unternehmen, um die Zurück-Taste zu verhindern, brechen, ist es ein sicherer Weg, Ihre Benutzer zu entfremden und schaffte es sogar auf Platz 1 auf Jacob Neilsen Top 10 Web-Design-Fehler 1999 .

Vielleicht könnte man bedenkt, eher die Frage stellen: „Wie die Zurück-Taste zu vermeiden, brechen für

Wenn Scotts Antwort trifft die Nähe der Marke, sollten Sie Ihren Fluss in das PRG-Modell zu ändern. Wenn es etwas anderes ist, dann ein bisschen mehr Detail geben und sehen, wie wir helfen können.

Ich kam mit einem kleinen Hack nach oben, die die Zurück-Taste mit Hilfe von JavaScript deaktiviert. Ich habe es auf Chrom 10, Firefox 3.6 und Internet Explorer 9:

<!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>

Die beste Option besteht darin, sich nicht auf Postbacks zu verlassen, um den Fluss zu steuern. Wenn Sie jedoch (vorerst) damit nicht weiterkommen,

Sie können so etwas verwenden:

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

Bald werden Sie feststellen, dass es nicht auf allen Browsern funktioniert, aber dann können Sie eine Prüfung in Ihren Code einführen, wie zum Beispiel:

 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;
  }

Das wird das Problem bis zu einem gewissen Grad lösen, der Code wurde nicht überprüft – nur zu Beispielzwecken.

Es ist möglich, Taste in alle wichtigen Browser zu deaktivieren zurück. Es verwendet nur Hash-Werte die Zurück-Taste vollständig zu deaktivieren. setzen diese nur 5 Zeilen Code in Ihrer Seite

 <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> 

Beschreibung:

Hier ist eine vorherige Post darauf: Prevent Verwendung der Zurück-Taste (in IE)

Was auch immer Sie kommen mit der Zurück-Taste zu deaktivieren, möglicherweise nicht die Zurück-Taste in Zukunft Browser stoppen.

Wenn sein spät im Entwicklungszyklus empfehle ich Ihnen einige Vorschläge versuchen, oben, aber wenn Sie Zeit bekommen Sie Ihren Fluss strukturieren sollten, so dass die Zurück-Taste mit der Logik Ihrer Website nicht stört, es ist einfach den Benutzer braucht, um die Rück vorherige Seite, wie sie es tun erwarten.

Es ist wahr, sollte angemessene Validierung sicher doppelte Daten machen hinzugefügt werden, nicht durcheinander zu bringen. Jedoch, wie in meinem Fall kann ich nicht die volle Kontrolle über die Daten, da ich einige Dritter API nach meiner Form bin mit. So habe ich diese

history.go(+1);

Das wird Benutzer sich auf die „Quittung“ senden, die nach dem „Zahlung“ Seite kommen soll, wenn sie versuchen, wieder auf „Zahlung“ Seite zu gehen (nur eine Zahlung zum Beispiel zu geben). Sparsam, obwohl

Sie können die Daten auf jedem Formular zu einem _NEW Fenster schreiben. Dadurch wird die Zurück-Taste auf jedes Fenster deaktivieren, aber ohne Javascript könnte es schwierig sein, die alten zu zwingen, geschlossen.

4 Typen von Rolla schrieben diesen Artikel auf Deaktivierung die Zurück-Taste vor langer Zeit (in einer Galaxie weit, weit weg): http://www.4guysfromrolla.com/webtech/111500-1.shtml

Ich war in der Lage, dies zu erreichen durch die Verwendung:

 Response.Cache.SetExpires(DateTime.MinValue);
 Response.Cache.SetNoStore();

Als ich noch Response.Cache.SetCacheability (HttpCacheability.NoCache); es hinderte mich Dateien Büro Download bereit.

Unten finden Sie Link

Disable Browser Zurück-Button-Funktionalität JavaScript in asp.net verwenden | ASP.Net deaktivieren Browser Zurück-Taste (mit Javascript)

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top