Ich mache eine Online-Quiz-App in PHP. Ich möchte den Benutzer daran hindern, an einer Prüfung teilzunehmen. Ich habe das folgende Skript ausprobiert, aber es stoppt meinen Timer. Was soll ich machen?
Ich habe den Quellcode eingefügt. Der Timer ist in cdtimer.js gespeichert
<script type="text/javascript">
window.history.forward();
function noBack()
{
window.history.forward();
}
</script>
<body onLoad="noBack();" onpageshow="if (event.persisted) noBack();" onUnload="">
Ich habe den Prüfungstimer, der eine Dauer für die Prüfung von einem MySQL- Wert benötigt. Der Timer startet entsprechend, stoppt jedoch, wenn ich den Code zum Deaktivieren der Zurück-Taste eingebe. Was ist mein Problem?
javascript
browser
Sawant Akshay
quelle
quelle
Antworten:
Es gibt zahlreiche Gründe, warum das Deaktivieren der Zurück-Taste nicht wirklich funktioniert. Am besten warnen Sie den Benutzer:
Diese Seite listet eine Reihe von Möglichkeiten , wie Sie könnten versuchen , die Zurück - Taste zu deaktivieren, aber keine sind garantiert:
http://www.irt.org/script/311.htm
quelle
Es ist im Allgemeinen eine schlechte Idee, das Standardverhalten des Webbrowsers zu überschreiben. Das clientseitige Skript verfügt aus Sicherheitsgründen nicht über die entsprechenden Berechtigungen.
Es werden auch nur wenige ähnliche Fragen gestellt:
Wie kann ich verhindern, dass die Rücktaste zurück navigiert?
Wie kann mit JavaScript verhindert werden, dass der Browser den Standardverlauf für die Rücktaste zurücksetzt?
Sie können die Zurück-Schaltfläche des Browsers nicht deaktivieren. Sie können jedoch mithilfe Ihrer Logik zaubern, um zu verhindern, dass Benutzer zurück navigieren, wodurch ein Eindruck entsteht, als wäre er deaktiviert. Schauen Sie sich das folgende Snippet an.
Dies ist in reinem JavaScript, so dass es in den meisten Browsern funktionieren würde. Es wäre auch deaktivieren Backspace Schlüssel aber Schlüssel funktionieren normalerweise in
input
Felder undtextarea
.Empfohlenes Setup:
Platzieren Sie dieses Snippet in einem separaten Skript und fügen Sie es auf einer Seite ein, auf der Sie dieses Verhalten wünschen. Im aktuellen Setup wird das
onload
Ereignis DOM ausgeführt, das der ideale Einstiegspunkt für diesen Code ist.Arbeiten DEMO!
In folgenden Browsern getestet und verifiziert,
quelle
location.hash
zunächst zurückgegeben, sodass ich es so machen musste. Es könnte weitere Verbesserungen geben, aber 50 ms haben mich nur einmal nicht viel gekostet, also lasse ich es dort.quelle
window.history.back()
funktioniert , aber bei Firefox scheint es die Funktion zu brechen . Wir möchten verhindern, dass Benutzer auf die Schaltfläche "Zurück" des Browsers klicken. In einigen Fällen stellen wir jedoch eine eigene Schaltfläche "Zurück" auf der Seite bereit. Gibt es eine Möglichkeit, es zum Laufen zu bringen?Ich bin darauf gestoßen und brauchte eine Lösung, die auf einer Vielzahl von Browsern, einschließlich Mobile Safari (iOS9 zum Zeitpunkt der Veröffentlichung), korrekt und "gut" funktionierte. Keine der Lösungen war ganz richtig. Ich biete Folgendes an (getestet auf IE11, FireFox, Chrome & Safari):
Beachte das Folgende:
history.forward()
(meine alte Lösung) funktioniert nicht auf Mobile Safari --- es scheint nichts zu tun (dh der Benutzer kann immer noch zurückgehen).history.pushState()
funktioniert bei allen.history.pushState()
ist eine URL . Lösungen, die eine Zeichenfolge wie " OK" übergeben'no-back-button'
oder'pagename'
zu funktionieren scheinen, bis Sie dann versuchen, die Seite zu aktualisieren / neu zu laden. Zu diesem Zeitpunkt wird der Fehler "Seite nicht gefunden" generiert, wenn der Browser versucht, eine Seite mit dieser URL zu finden. (Der Browser wird diese Zeichenfolge wahrscheinlich auch in die Adressleiste auf der Seite aufnehmen, was hässlich ist.)location.href
Sollte für die URL verwendet werden.history.pushState()
ist ein Titel . Wenn Sie sich im Internet umschauen, sagen die meisten Orte, dass es "nicht verwendet" wird, und alle Lösungen hier geltennull
dafür. Zumindest in Mobile Safari wird dadurch die URL der Seite in die Verlaufs-Dropdown-Liste aufgenommen, auf die der Benutzer zugreifen kann. Wenn jedoch normalerweise ein Eintrag für einen Seitenbesuch hinzugefügt wird, wird der Titel eingegeben , was vorzuziehen ist. Das Bestehendocument.title
führt also zum gleichen Verhalten.quelle
Dieser Code deaktiviert die Zurück-Schaltfläche für moderne Browser, die die HTML5-Verlaufs-API unterstützen. Unter normalen Umständen geht das Drücken der Zurück-Taste einen Schritt zurück zur vorherigen Seite. Wenn Sie history.pushState () verwenden, fügen Sie der aktuellen Seite zusätzliche Unterschritte hinzu. Wenn Sie history.pushState () dreimal verwenden, drücken Sie die Zurück-Taste, die ersten drei Male, in denen in diesen Unterschritten zurück navigiert wird, und das vierte Mal, wenn Sie zurückkehren die vorherige Seite.
Wenn Sie dieses Verhalten mit einem Ereignis-Listener für das
popstate
Ereignis kombinieren , können Sie im Wesentlichen eine Endlosschleife von Unterzuständen einrichten. Sie laden also die Seite, drücken einen Unterzustand und drücken dann die Zurück-Taste, wodurch ein Unterzustand angezeigt wird und auch ein anderer gedrückt wird. Wenn Sie also die Zurück-Taste erneut drücken, gehen Ihnen nie die Unterzustände zum Drücken aus . Wenn Sie der Meinung sind, dass die Zurück-Taste deaktiviert werden muss, gelangen Sie dorthin.quelle
no-back-button
... zu finden. (Der Browser wird wahrscheinlich auchno-back-button
in der Adresse angezeigt Bar auch, was hässlich erscheint.) Um fair zu sein, ist dies hier nicht die einzige Lösung, die darunter leidet. Das dritte Argument fürhistory.pushState()
ist eine URL und muss die URL Ihrer aktuellen Seite sein: Verwenden Sielocation.href
stattdessen.Für Restrict Browser back event
quelle
quelle
So könnte ich es erreichen. Das Fenster seltsam zu wechseln. Die Position in Chrom und Safari hat nicht gut funktioniert. Es passiert, dass die location.hash keinen Eintrag in der Geschichte für Chrome und Safari erstellt. Sie müssen also den Pushstate verwenden. Dies funktioniert bei mir in allen Browsern.
quelle
$(document).ready(function () { .... });
quelle
event.persisted
?Dieser Artikel auf jordanhollinger.com ist die beste Option, die ich fühle. Ähnlich wie Razors Antwort, aber etwas klarer. Code unten; volle Credits an Jordan Hollinger:
Seite vor:
JavaScript der Seite ohne Rückgabe:
quelle
Mit diesem Javascript kann kein Benutzer zurückkehren (funktioniert in Chrome, FF, IE, Edge).
quelle
Probieren Sie es mit Leichtigkeit aus:
quelle
Dieser Code wurde mit den neuesten Chrome- und Firefox-Browsern getestet.
quelle
Sehr einfache und saubere Funktion, um den Pfeil nach hinten zu brechen, ohne die Seite danach zu stören.
Leistungen:
onbeforeunload
setInterval
damit langsame Browser nicht beschädigt werden und immer funktioniert.unbeforeunload
was den Benutzer mit dem modalen Dialog unterbricht.Hinweis: Einige der anderen Lösungen verwenden
onbeforeunload
. Bitte nicht verwendetonbeforeunload
für diesen Zweck, die einen Dialog erscheint , wenn Benutzer versuchen , das Fenster, Hit backarrow zu schließen usw. Modalverben wieonbeforeunload
sind in der Regel nur in seltenen Umständen angemessen, wie wenn sie haben tatsächlich Änderungen auf dem Bildschirm und haven‘ Ich habe sie nicht zu diesem Zweck gespeichert.Wie es funktioniert
Das ist es. Kein weiteres Herumspielen, keine Überwachung von Hintergrundereignissen, sonst nichts.
Verwenden Sie es in einer Sekunde
Fügen Sie dies zum Bereitstellen einfach an einer beliebigen Stelle auf Ihrer Seite oder in Ihrem JS hinzu:
quelle
Dies scheint für uns beim Deaktivieren der Zurück-Schaltfläche im Browser sowie der Rücktaste, die Sie zurückbringt, funktioniert zu haben.
quelle
quelle
Sie können und sollten dies einfach nicht tun. Dies könnte jedoch hilfreich sein
Funktioniert in meinem Chrom und Firefox
quelle
Versuchen Sie dies, um eine Rücktaste im IE zu verhindern, die standardmäßig als "Zurück" fungiert:
quelle
Ich glaube, die perfekte und doch perfekte Lösung ist eigentlich ziemlich einfach, die ich seit vielen Jahren verwende.
Grundsätzlich wird das Ereignis "onbeforeunload" des Fensters zusammen mit den laufenden Ereignissen "mouseenter" / "mouseleave" des Dokuments zugewiesen, sodass die Warnung nur ausgelöst wird, wenn Klicks außerhalb des Dokumentbereichs liegen (dies kann entweder die Schaltfläche "Zurück" oder "Vorwärts" des Browsers sein).
quelle
In einem modernen Browser scheint dies zu funktionieren:
quelle
Keine der am häufigsten bewerteten Antworten hat in Chrome 79 für mich funktioniert . Es sieht so aus, als hätte Chrome sein Verhalten in Bezug auf die Schaltfläche "Zurück" nach Version 75 geändert. Siehe hier:
https://support.google.com/chrome/thread/8721521?hl=de
In diesem Google-Thread hat die Antwort von Azrulmukmin Azmi am Ende jedoch funktioniert. Das ist seine Lösung.
Ich verstehe nicht ganz, was er geschrieben hat, aber anscheinend
history.back() / history.forward()
ist jetzt eine zusätzliche erforderlich, um Back in Chrome 75+ zu blockieren.quelle
Ich erstelle eine HTML-Seite (index.html). Ich erstelle auch eine Eins (mechanism.js) in einem (Skript-) Ordner / Verzeichnis. Dann lege ich meinen gesamten Inhalt innerhalb von (index.html) mit Formular-, Tabellen-, Span- und Div-Tags nach Bedarf. Hier ist der Trick, mit dem das Vor- und Zurückschalten nichts bewirkt!
Erstens die Tatsache, dass Sie nur eine Seite haben! Zweitens die Verwendung von JavaScript mit span / div-Tags, um Inhalte auf derselben Seite bei Bedarf über reguläre Links auszublenden und anzuzeigen!
Innerhalb von 'index.html':
Innerhalb von 'mechanismus.js':
Es sieht haarig aus, beachten Sie jedoch die Funktionsnamen und Aufrufe, das eingebettete HTML und die Aufrufe der span-Tag-ID. Dies sollte zeigen, wie Sie unterschiedlichen HTML-Code in dasselbe Span-Tag auf derselben Seite einfügen können! Wie kann sich Zurück / Vorwärts auf dieses Design auswirken? Dies ist nicht möglich, da Sie Objekte verstecken und andere auf derselben Seite ersetzen!
Wie verstecke und zeige ich? Hier geht's: Verwenden Sie in Funktionen in 'mechanism.js' nach Bedarf Folgendes:
Innerhalb von 'index.html' rufen Funktionen über Links auf:
und
Ich hoffe, ich habe dir keine Kopfschmerzen bereitet. Entschuldigung, wenn ich das getan habe :-)
quelle
In meinem Fall war dies eine Bestellung. Also habe ich den Button deaktiviert. Als der Benutzer zurückklickte, war die Schaltfläche weiterhin deaktiviert. Wenn sie noch einmal zurückklickten und dann auf eine Seitenschaltfläche klickten, um fortzufahren. Ich wusste, dass ihre Bestellung eingereicht und auf eine andere Seite gesprungen wurde.
In dem Fall, in dem die Seite tatsächlich aktualisiert wurde, wodurch die Schaltfläche (theoretisch) verfügbar würde; Ich konnte dann beim Laden der Seite reagieren, dass die Bestellung bereits übermittelt wurde und dann auch umleiten.
quelle
quelle
javascript:
Ihnen geschriebene definiert ein JavaScript- Label mit dem Namen "Javascript". Ich bezweifle sehr, dass Sie das beabsichtigt haben; Ich vermute, Sie verwechseln sichhref=javascript:...
mit JavaScript-<script>
Blöcken. 2. hatlanguage="JavaScript"
aufgehört, ein gültiges<script>
Attribut bei HTML5 zu sein. 3. Die obigen 2 Punkte sind nicht wichtig. Was wichtig ist, ist, dasshistory.forward(1)
dies in Mobile Safari (zumindest) nicht funktioniert. Verwenden Siehistory.pushState()
stattdessen eine der Antworten.Sie können einfach ein kleines Skript einfügen und dann überprüfen. Sie können die vorherige Seite nicht besuchen. Dies geschieht in Javascript.
Die Funktion window.onunload wird ausgelöst, wenn Sie versuchen, die vorherige oder vorherige Seite über den Browser aufzurufen.
Hoffe das hilft.
quelle
Ich hatte dieses Problem mit React.JS. (Klassenkomponente)
Und leicht zu lösen
Ich habe verwendet
HashRouter
ausreact-router-dom
.quelle
Einfach einstellen
location.hash="Something"
: Beim Drücken der Zurück-Taste wird der Hash aus der URL entfernt, aber die Seite wird nicht zurückgesetzt. Diese Methode ist gut, um ein versehentliches Zurückkehren zu verhindern. Aus Sicherheitsgründen sollten Sie Ihr Backend so gestalten, dass eine erneute Beantwortung verhindert wirdquelle
quelle