Wie deaktiviere ich die BACK-Taste des Browsers (für alle Browser)?
Wie deaktiviere ich die BACK-Taste des Browsers (für alle Browser)?
Antworten:
Diese Frage ist sehr ähnlich wie diese ein ...
Sie müssen erzwingen, dass der Cache abläuft, damit dies funktioniert. Platzieren Sie den folgenden Code auf Ihrem Seitencode dahinter.
Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)
Deaktivieren Sie das erwartete Browserverhalten nicht.
Stellen Sie sicher, dass Ihre Seiten die Möglichkeit haben, dass Benutzer ein oder zwei Seiten zurückgehen. Versuchen Sie nicht, ihre Software zu lähmen.
Ich habe mir einen kleinen Hack ausgedacht, der die Zurück-Schaltfläche mit JavaScript deaktiviert. Ich habe es auf Chrome 10, Firefox 3.6 und IE9 überprüft:
<!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 the back button!
</body>
</html>
Was macht es?
Aus den Kommentaren:
Dieses Skript nutzt die Tatsache, dass Browser berücksichtigen, was nach dem "#" -Zeichen in der URL als Teil des Browserverlaufs steht. Dies bewirkt Folgendes: Wenn die Seite geladen wird, wird der URL "# 1" hinzugefügt. Nach 50 ms wird die "1" entfernt. Wenn der Benutzer auf "Zurück" klickt, ändert der Browser die URL wieder auf den Stand vor dem Entfernen der "1", ABER - es handelt sich um dieselbe Webseite, sodass der Browser die Seite nicht neu laden muss. - Yossi Shasho
Andere haben den Ansatz gewählt, "Tu das nicht" zu sagen, aber das beantwortet die Frage des Posters nicht wirklich. Nehmen wir einfach an, dass jeder weiß, dass dies eine schlechte Idee ist, aber wir sind gespannt, wie es trotzdem gemacht wird ...
Sie können die Zurück-Schaltfläche im Browser eines Benutzers nicht deaktivieren, aber Sie können festlegen, dass Ihre Anwendung unterbrochen wird (zeigt eine Fehlermeldung an, bei der der Benutzer neu beginnen muss), wenn der Benutzer zurückkehrt.
Ein Ansatz, den ich dafür gesehen habe, besteht darin, ein Token für jede URL in der Anwendung und in jedem Formular zu übergeben. Das Token wird auf jeder Seite neu generiert, und sobald der Benutzer eine neue Seite lädt, werden alle Token von vorherigen Seiten ungültig.
Wenn der Benutzer eine Seite lädt, wird auf der Seite nur angezeigt, ob das richtige Token (das allen Links / Formularen auf der vorherigen Seite zugewiesen wurde) an diese Seite übergeben wurde.
Die von meiner Bank bereitgestellte Online-Banking-Anwendung ist wie folgt. Wenn Sie die Schaltfläche "Zurück" verwenden, funktionieren keine Links mehr und es können keine Seiten neu geladen werden. Stattdessen wird ein Hinweis angezeigt, dass Sie nicht zurückkehren können und von vorne beginnen müssen.
Während ich selbst nach der Antwort suche, ist "Best Practice" ... veraltet ... genau wie Browser. (Wirklich Browser sind hässliche Fossilien)
Die beste / sicherste Lösung wäre, dass Browser eine Methode / Anforderung implementieren, bei der der Benutzer der Seite die Möglichkeit geben kann, die Benutzeroberfläche zu steuern.
Warum? Weil ich für mein aktuelles Projekt eine zu 100% aus JavaScript erstellte und kontrollierte Oberfläche baue. Und die Schaltflächen "Zurück" haben keinen Platz in meinem Projekt, da es keinen Seitenwechsel gibt. (Dh verdammt schnell und keine Seitenblitze wegen einer Aktualisierung. Genau wie bei einer echten Anwendung!)
Ich weiß, warum die Fähigkeit, die Schnittstelle zu "highjacken", nicht vorhanden ist, und ich verstehe es. Aber zumindest sollten wir die Möglichkeit haben, es vom Browser anzufordern! Nun, das wäre wirklich "Best Practice" ohne die Highjack-Gefahren.
Aber Browser sind Browser. Ich erwarte nicht, dass diesbezüglich etwas Aufregendes passiert.
Ich habe nach derselben Frage gesucht und auf einer Site folgenden Code gefunden. Dachte, es hier zu teilen:
function noBack()
{
window.history.forward()
}
noBack();
window.onload = noBack;
window.onpageshow = function(evt){ if(evt.persisted) noBack(); }
window.onunload = function(){ void(0); }
Wie von den oben genannten Benutzern erwähnt, ist dies jedoch niemals eine gute Vorgehensweise und sollte aus allen Gründen vermieden werden.
Wenn Sie sich auf clientseitige Technologie verlassen, kann diese umgangen werden. Javascript kann beispielsweise deaktiviert sein. Oder der Benutzer führt möglicherweise ein JS-Skript aus, um Ihre Einschränkungen zu umgehen.
Ich vermute, Sie können dies nur tun, indem Sie die Benutzersitzung serverseitig verfolgen und den Benutzer / Browser (wie in Server.Transfer, nicht Response.Redirect) auf die gewünschte Seite umleiten.
Es gab einige verschiedene Implementierungen. Es gibt eine Flash-Lösung und einige Iframe / Frame-Lösungen für IE. Schau dir das an
Übrigens: Es gibt viele triftige Gründe, eine Zurück-Schaltfläche zu deaktivieren (oder zumindest 1 Schritt zu verhindern). Sehen Sie sich Google Mail als Beispiel an, das die im obigen Artikel beschriebene Hash-Lösung implementiert.
Google "Wie Ajax den Zurück-Button kaputt gemacht hat" und Sie finden zahlreiche Artikel zu Benutzertests und der Gültigkeit des Deaktivierens des Zurück-Buttons.
Ich hatte auch das gleiche Problem, verwenden Sie diese Java-Skript-Funktion auf Head-Tag oder in, es funktioniert zu 100% gut, würde Sie nicht zurücklassen.
<script type = "text/javascript" >
function preventBack(){window.history.forward();}
setTimeout("preventBack()", 0);
window.onunload=function(){null};
</script>
Versuchen Sie diesen Code. Hat für mich gearbeitet. Grundsätzlich wird der Hash geändert, sobald die Seite geladen wird. Dadurch wird die Seite mit dem letzten Verlauf geändert, indem der URL "1" hinzugefügt wird. Wenn Sie also auf die Schaltfläche "Zurück" klicken, wird jedes Mal auf dieselbe Seite umgeleitet.
<script type="text/javascript">
var storedHash = window.location.hash;
function changeHashOnLoad() { window.location.hash = "1";}
window.onhashchange = function () {
window.location.hash = storedHash;
}
</script>
<body onload="changeHashOnLoad(); ">
</bod>
Sie sollten Posts mit ordnungsgemäßem Ablauf und zwischengespeicherten Headern verwenden.
Anstatt zu versuchen, die Zurück-Schaltfläche des Browsers zu deaktivieren, ist es besser, sie zu unterstützen. .NET 3.5 kann sehr gut mit den Schaltflächen zum Zurück- (und Vorwärts-) Schalten des Browsers umgehen. Suche mit Google: "Scriptmanager EnableHistory". Sie können steuern, welche Benutzeraktionen einen Eintrag zum Browserverlauf hinzufügen (ScriptManager -> AddHistoryPoint) und Ihre ASP.NET-Anwendung ein Ereignis empfängt, wenn der Benutzer auf die Schaltflächen Zurück / Weiter des Browsers klickt. Dies funktioniert für alle bekannten Browser
Das Deaktivieren der Zurück-Taste ist weltweit in der Tat eine schlechte Praxis. In bestimmten Situationen ist die Funktion der Zurück-Taste jedoch nicht sinnvoll.
Hier ist eine Möglichkeit, unerwünschte Navigation zwischen Seiten zu verhindern:
Startseite (Datei top.php):
<?php
session_start();
$_SESSION[pid]++;
echo "top page $_SESSION[pid]";
echo "<BR><a href='secondary.php?pid=$_SESSION[pid]'>secondary page</a>";
?>
Sekundärseite (Datei secondary.php):
<?php
session_start();
if ($_SESSION[pid] != $_GET[pid])
header("location: top.php");
else {
echo "secondary page $_SESSION[pid]";
echo "<BR><a href='top.php'>top</a>";
}
?>
Der Effekt besteht darin, dass Sie mithilfe Ihrer eigenen Links von der oberen Seite zur zweiten Seite und zurück navigieren (z. B. Abbrechen). Nach der Rückkehr zur obersten Seite wird jedoch verhindert, dass die Schaltfläche "Zurück" des Browsers zur sekundären Seite navigiert.
Sogar ich hatte vorher die gleiche Situation ... und hatte keine Hilfe. Probieren Sie diese Dinge aus, vielleicht funktionieren sie für Sie
im <head>Tag der Anmeldeseite :
<script type="text/javascript">
window.history.forward();
</script>
In der Abmeldeschaltfläche habe ich Folgendes getan:
protected void Btn_Logout_Click(object sender, EventArgs e)
{
connObj.Close();
Session.Abandon();
Session.RemoveAll();
Session.Clear();
HttpContext.Current.Session.Abandon();
}
und auf der Anmeldeseite habe ich den Fokus auf das Textfeld Benutzername wie folgt gelegt:
protected void Page_Load(object sender, EventArgs e)
{
_txtUsername.Focus();
}
hoffe das hilft ... :) jemand bringt mir bitte bei, wie man diese Seite bearbeitet ...
Wenn Sie die Lösch- und Rücktaste in Ihrer Web-App sanft unterdrücken müssen, damit die Seite beim Bearbeiten / Löschen von Elementen nicht unerwartet umgeleitet wird, können Sie diesen Code verwenden:
window.addEventListener('keydown', function(e) {
var key = e.keyCode || e.which;
if (key == 8 /*BACKSPACE*/ || key == 46/*DELETE*/) {
var len=window.location.href.length;
if(window.location.href[len-1]!='#') window.location.href += "#";
}
},false);
Versuchen Sie diesen Code. Sie müssen diesen Code nur auf der Masterseite implementieren und er funktioniert auf allen Seiten für Sie
<script type="text/javascript">
window.onload = function () {
noBack();
}
function noBack() {
window.history.forward();
}
</script>
<body onpageshow="if (event.persisted) noBack();">
</body>
Das Problem mit Yossi Shashos Code ist, dass die Seite alle 50 ms nach oben rollt. Also habe ich diesen Code geändert. Jetzt funktioniert es einwandfrei auf allen modernen Browsern, IE8 und höher
var storedHash = window.location.hash;
function changeHashOnLoad() {
window.location.href += "#";
setTimeout("changeHashAgain()", "50");
}
function changeHashAgain() {
window.location.href += "1";
}
function restoreHash() {
if (window.location.hash != storedHash) {
window.location.hash = storedHash;
}
}
if (window.addEventListener) {
window.addEventListener("hashchange", function () {
restoreHash();
}, false);
}
else if (window.attachEvent) {
window.attachEvent("onhashchange", function () {
restoreHash();
});
}
$(window).load(function () { changeHashOnLoad(); });