Robię quiz online w php. Chcę uniemożliwić użytkownikowi powrót do egzaminu. Wypróbowałem następujący skrypt, ale zatrzymuje on mój zegar. Co powinienem zrobić?
Załączam kod źródłowy. Zegar jest przechowywany w cdtimer.js
<script type="text/javascript">
window.history.forward();
function noBack()
{
window.history.forward();
}
</script>
<body onLoad="noBack();" onpageshow="if (event.persisted) noBack();" onUnload="">
Mam licznik czasu egzaminu, który trwa egzamin z wartości mysql . Licznik czasu uruchamia się odpowiednio, ale zatrzymuje się, gdy wstawiam kod wyłączający przycisk Wstecz. Jaki jest mój problem?
javascript
browser
Sawant Akshay
źródło
źródło
Odpowiedzi:
Istnieje wiele powodów, dla których wyłączenie przycisku Wstecz tak naprawdę nie działa. Najlepszym rozwiązaniem jest ostrzeżenie użytkownika:
Ta strona nie wyszczególniają cały szereg sposobów Państwo mogli spróbować wyłączyć przycisk wstecz, ale są gwarantowane none:
http://www.irt.org/script/311.htm
źródło
Generalnie złym pomysłem jest zastępowanie domyślnego zachowania przeglądarki internetowej. Skrypt po stronie klienta nie ma wystarczających uprawnień, aby to zrobić ze względów bezpieczeństwa.
Jest też kilka podobnych pytań,
Jak mogę zapobiec cofaniu się klawisza Backspace?
Jak zapobiec domyślnej operacji cofania historii przeglądarki dla przycisku Backspace za pomocą JavaScript?
W rzeczywistości nie można wyłączyć przycisku Wstecz przeglądarki. Możesz jednak robić magię, używając swojej logiki, aby uniemożliwić użytkownikowi nawigację z powrotem, co stworzy wrażenie, jakby było wyłączone. Oto jak, sprawdź następujący fragment.
To jest w czystym JavaScript, więc działałoby w większości przeglądarek. Spowoduje to również wyłączenie klawisza Backspace , ale klawisz będzie działał normalnie wewnątrz
input
pól itextarea
.Zalecana konfiguracja:
Umieść ten fragment kodu w osobnym skrypcie i umieść go na stronie, na której chcesz uzyskać takie zachowanie. W obecnej konfiguracji wykona
onload
zdarzenie DOM, które jest idealnym punktem wejścia dla tego kodu.Działające DEMO!
Przetestowane i zweryfikowane w następujących przeglądarkach,
źródło
location.hash
początkowo zwrócił pusty, więc sprawił, że zrobiłem to w ten sposób. Mogłoby być więcej poprawy, ale 50 ms tylko raz nie kosztowało mnie dużo, więc zostawiam to tam.Natknąłem się na to, potrzebując rozwiązania, które działałoby poprawnie i „ładnie” w różnych przeglądarkach, w tym Mobile Safari (iOS9 w momencie publikacji). Żadne z rozwiązań nie było całkiem poprawne. Oferuję co następuje (testowane na IE11, FireFox, Chrome i Safari):
Zwróć uwagę na następujące kwestie:
history.forward()
(moje stare rozwiązanie) nie działa w Mobile Safari - wydaje się, że nic nie robi (tj. użytkownik nadal może wrócić).history.pushState()
działa na wszystkich z nich.history.pushState()
jest adres URL . Rozwiązania, które przekazują ciąg, takie jak'no-back-button'
lub'pagename'
wydają się działać OK, dopóki nie spróbujesz Odśwież / Ponownie załaduj stronę, w którym to momencie generowany jest błąd „Nie znaleziono strony”, gdy przeglądarka próbuje zlokalizować stronę z tym adresem jako adresem URL. (Przeglądarka prawdopodobnie również umieści ten ciąg w pasku adresu, gdy jest na stronie, co jest brzydkie)location.href
.history.pushState()
to tytuł . Rozglądając się po internecie w większości miejsc, stwierdza się, że jest on „nieużywany” i wszystkie przedstawione tutaj rozwiązania mijałynull
z tym. Jednak przynajmniej w Mobile Safari powoduje to umieszczenie adresu URL strony na liście historii, do której użytkownik ma dostęp. Ale kiedy normalnie dodaje wpis dotyczący wizyty na stronie, umieszcza w tytule , co jest lepsze. Więc pomijaniedocument.title
tego skutkuje tym samym zachowaniem.źródło
źródło
window.history.back()
funkcję. Chcemy uniemożliwić użytkownikom klikanie przycisku Wstecz w przeglądarce, ale w niektórych przypadkach udostępniamy własny przycisk Wstecz na stronie. Czy jest jakiś sposób, aby to zadziałało?Ten kod wyłączy przycisk Wstecz w nowoczesnych przeglądarkach obsługujących interfejs API historii HTML5. W normalnych okolicznościach naciśnięcie przycisku Wstecz powoduje cofnięcie się o jeden krok do poprzedniej strony. Jeśli używasz history.pushState (), zaczynasz dodawać dodatkowe pod-kroki do bieżącej strony. Sposób działania jest taki, że gdybyś użył history.pushState () trzy razy, a następnie zacznij naciskać przycisk Wstecz, pierwsze trzy razy spowoduje powrót do tych podetapów, a następnie czwarty raz wróci do poprzednia strona.
Jeśli połączysz to zachowanie z detektorem zdarzenia w
popstate
zdarzeniu, możesz zasadniczo skonfigurować nieskończoną pętlę stanów podrzędnych. Wczytujesz więc stronę, wciskasz stan podrzędny, a następnie wciskasz przycisk Wstecz, który powoduje wyświetlenie stanu podrzędnego, a także przesuwa kolejny, więc jeśli ponownie naciśniesz przycisk Wstecz, nigdy nie zabraknie stanów podrzędnych do naciśnięcia . Jeśli uważasz, że konieczne jest wyłączenie przycisku Wstecz, to Cię tam zaprowadzi.źródło
no-back-button
... (Przeglądarka prawdopodobnie również wyświetli sięno-back-button
w adresie bar, co wydaje się brzydkie.) Szczerze mówiąc, nie jest to jedyne rozwiązanie, które cierpi z tego powodu. Trzecim argumentemhistory.pushState()
jest adres URL i musi to być adres URL bieżącej strony: użyjlocation.href
zamiast tego.W przypadku zdarzenia Restrict Browser back
źródło
źródło
W ten sposób mogłem to osiągnąć. Dziwna zmiana okna. Lokalizacja nie działała dobrze w chrome i safari. Zdarza się, że plik location.hash nie tworzy wpisu w historii Chrome i Safari. Więc będziesz musiał użyć pushstate. To działa dla mnie we wszystkich przeglądarkach.
źródło
$(document).ready(function () { .... });
źródło
event.persisted
?Ten artykuł na jordanhollinger.com jest najlepszą opcją, jaką czuję. Podobna do odpowiedzi Razora, ale nieco jaśniejsza. Kod poniżej; pełne uznanie dla Jordana Hollingera:
Strona przed:
Strona z kodem JavaScript bez powrotu:
źródło
Ten javascript nie pozwala na powrót żadnego użytkownika (działa w Chrome, FF, IE, Edge)
źródło
Wypróbuj z łatwością:
źródło
Ten kod został przetestowany z najnowszymi przeglądarkami Chrome i Firefox.
źródło
Bardzo prosta i przejrzysta funkcja do łamania strzałki wstecz bez ingerencji w późniejszą stronę.
Korzyści:
onbeforeunload
setInterval
więc nie psuje wolnych przeglądarek i zawsze działa.unbeforeunload
co przerywa użytkownikowi modalne okno dialogowe.Uwaga: niektóre inne rozwiązania używają
onbeforeunload
. Proszę nie używaćonbeforeunload
do tego celu, który pojawia się okno dialogowe, gdy użytkownicy próbują zamknąć okno, uderzył backarrow itp czasowniki modalne jakonbeforeunload
zwykle są właściwe tylko w rzadkich przypadkach, na przykład gdy oni faktycznie dokonane zmiany na ekranie i raj” Uratowałem ich, nie w tym celu.Jak to działa
Otóż to. Żadnych dalszych zamieszania, żadnego monitorowania zdarzeń w tle, nic więcej.
Użyj go w jedną sekundę
Aby wdrożyć, po prostu dodaj to w dowolnym miejscu na swojej stronie lub w swoim JS:
źródło
Wygląda na to, że zadziałało to dla nas, wyłączając przycisk Wstecz w przeglądarce, a także przycisk Backspace, który cię cofa.
źródło
źródło
Po prostu nie możesz i nie powinieneś tego robić. Jednak może to być pomocne
Działa w moim Chrome i Firefox
źródło
Spróbuj tego, aby zapobiec przyciskowi Backspace w IE, który domyślnie działa jako „Wstecz”:
źródło
Uważam, że idealne, ale w rzeczywistości rozwiązanie jest całkiem proste, z którego korzystałem od wielu lat.
Zasadniczo przypisuje się zdarzenie „onbeforeunload” okna wraz z trwającymi zdarzeniami „mouseenter” / „mouseleave” dokumentu, więc alert jest wyzwalany tylko wtedy, gdy kliknięcia są poza zakresem dokumentu (którym może być przycisk Wstecz lub Dalej przeglądarki)
źródło
W nowoczesnej przeglądarce wydaje się to działać:
źródło
Żadna z najczęściej ocenianych odpowiedzi nie działała dla mnie w Chrome 79 . Wygląda na to, że Chrome zmienił swoje zachowanie w odniesieniu do przycisku Wstecz po wersji 75, zobacz tutaj:
https://support.google.com/chrome/thread/8721521?hl=en
Jednak w tym wątku Google zadziałała odpowiedź udzielona przez Azrulmukmin Azmi na samym końcu. To jest jego rozwiązanie.
Nie do końca rozumiem, co napisał, ale najwyraźniej dodatkowy
history.back() / history.forward()
jest teraz wymagany do blokowania Back w Chrome 75+.źródło
Tworzę jedną stronę HTML (index.html). Tworzę również jeden (mechanizm.js) w folderze / katalogu (skrypt). Następnie umieszczam całą zawartość wewnątrz (index.html), używając w razie potrzeby znaczników formularza, tabeli, zakresu i znaczników DIV. Oto sztuczka, która sprawi, że wstecz / dalej nic nie zrobią!
Po pierwsze, fakt, że masz tylko jedną stronę! Po drugie, użycie JavaScript z tagami span / div do ukrywania i wyświetlania treści na tej samej stronie, gdy jest to potrzebne, za pośrednictwem zwykłych linków!
Wewnątrz „index.html”:
Wewnątrz pliku „Mechanizm.js”:
Wygląda dziwnie, ale zwróć uwagę na nazwy i wywołania funkcji, osadzony kod HTML i wywołania identyfikatora tagu span. Miało to pokazać, jak można wstawić inny kod HTML do tego samego tagu span na tej samej stronie! Jak wstecz / dalej może wpłynąć na ten projekt? Nie może, ponieważ ukrywasz obiekty i zastępujesz inne na tej samej stronie!
Jak ukryć i wyświetlić? Oto idzie: Wewnątrz funkcji w 'mechanizmie.js' stosownie do potrzeb, użyj:
Wewnątrz funkcji „index.html” wywołanie funkcji za pośrednictwem linków:
i
Mam nadzieję, że nie sprawiłem ci bólu głowy. Przepraszam, jeśli tak :-)
źródło
W moim przypadku było to zamówienie na zakupy. Więc to, co zrobiłem, to wyłączenie przycisku. Gdy użytkownik kliknął z powrotem, przycisk był nadal wyłączony. Kiedy kliknęli wstecz jeszcze raz, a następnie kliknęli przycisk strony, aby przejść dalej. Wiedziałem, że ich zamówienie zostało przesłane i przeskoczyłem na inną stronę.
W przypadku, gdy strona faktycznie się odświeżyła, co spowodowałoby (teoretycznie) dostępność przycisku; Byłem wtedy w stanie zareagować w wczytywaniu strony, że zamówienie zostało już przesłane i przekierować również wtedy.
źródło
źródło
javascript:
Napisany przez Ciebie tekst definiuje etykietę JavaScript o nazwie „javascript”. Bardzo wątpię, że to zamierzyłeś; Podejrzewam, że mylisz sięhref=javascript:...
z<script>
blokami JavaScript . 2.language="JavaScript"
przestał być prawidłowym<script>
atrybutem w HTML5. 3. Powyższe 2 punkty nie mają większego znaczenia; ważne jest to, żehistory.forward(1)
nie działa w Mobile Safari (przynajmniej).history.pushState()
Zamiast tego użyj jednej z odpowiedzi.Możesz po prostu umieścić mały skrypt, a następnie sprawdzić. Nie pozwoli ci odwiedzić poprzedniej strony. Odbywa się to w javascript.
Funkcja window.onunload uruchamia się podczas próby odwiedzenia poprzedniej lub poprzedniej strony za pomocą przeglądarki.
Mam nadzieję że to pomoże.
źródło
Miałem ten problem z React.JS. (składnik klasy)
I łatwo rozwiązuj
Użyłem
HashRouter
odreact-router-dom
.źródło
Po prostu ustaw
location.hash="Something"
, Po naciśnięciu przycisku Wstecz hash zostanie usunięty z adresu URL, ale strona nie wróci.Ta metoda jest dobra, aby zapobiec przypadkowemu powrocie, ale ze względów bezpieczeństwa powinieneś zaprojektować swój backend, aby zapobiec ponownemu odpowiadaniuźródło
źródło