Я делаю онлайн-приложение викторины в php. Я хочу запретить пользователю возвращаться на экзамен. Я пробовал следующий скрипт, но он останавливает мой таймер. Что я должен делать?
Я включил исходный код. Таймер хранится в cdtimer.js
<script type="text/javascript">
window.history.forward();
function noBack()
{
window.history.forward();
}
</script>
<body onLoad="noBack();" onpageshow="if (event.persisted) noBack();" onUnload="">
У меня есть таймер экзамена, который берет продолжительность экзамена из значения MySQL . Таймер запускается соответствующим образом, но останавливается, когда я ввожу код для отключения кнопки «Назад». В чем моя проблема?
javascript
browser
Савант Акшай
источник
источник
Ответы:
Существует множество причин, по которым отключение кнопки «назад» не будет работать. Лучше всего предупредить пользователя:
Эта страница не перечислен ряд способов , которыми Вы могли бы попытаться отключить кнопку назад, но никто не гарантирует:
http://www.irt.org/script/311.htm
источник
Как правило, это плохая идея, игнорирующая поведение веб-браузера по умолчанию. Сценарий на стороне клиента не имеет достаточных прав для этого по соображениям безопасности.
Есть несколько похожих вопросов,
Как я могу помешать клавише возврата вернуться назад?
Как предотвратить обратное действие истории браузера по умолчанию для кнопки возврата с помощью JavaScript?
Вы не можете отключить кнопку возврата браузера. Однако вы можете творить чудеса, используя свою логику, чтобы пользователь не смог вернуться назад, что создаст впечатление, будто оно отключено. Вот как, посмотрите следующий фрагмент.
Это в чистом JavaScript, поэтому он будет работать в большинстве браузеров. Это также отключило бы клавишу возврата, но ключ будет нормально работать внутри
input
полей иtextarea
.Рекомендуемая настройка:
Поместите этот фрагмент в отдельный скрипт и включите его на страницу, где вы хотите, чтобы это поведение. В текущей настройке он выполнит
onload
событие DOM, которое является идеальной точкой входа для этого кода.Рабочая ДЕМО!
Протестировано и проверено в следующих браузерах,
источник
location.hash
Изначально Chrome вернул пустое место, поэтому я сделал это так. Это могло бы быть лучше, но 50 мсек один раз не стоили мне много, поэтому я оставил это там.Я столкнулся с этим, мне нужно решение, которое работало бы корректно и «красиво» на различных браузерах, включая Mobile Safari (iOS9 на момент публикации). Ни одно из решений не было совершенно правильным. Я предлагаю следующее (протестировано на IE11, FireFox, Chrome & Safari):
Обратите внимание на следующее:
history.forward()
(мое старое решение) не работает на Mobile Safari --- кажется, ничего не делает (то есть пользователь все еще может вернуться).history.pushState()
работает на всех из них.history.pushState()
- это URL . Решения, которые передают строку вроде'no-back-button'
или,'pagename'
кажется, работают нормально, пока вы не попробуете Обновить / Обновить на странице, после чего генерируется ошибка «Страница не найдена», когда браузер пытается найти страницу с таким URL-адресом. (Браузер также может включать эту строку в адресную строку, когда на странице, что некрасиво.)location.href
Должен использоваться для URL.history.pushState()
- это заголовок . Просматривая Интернет, большинство мест говорят, что оно «не используется», и все решения здесь проходятnull
. Однако, по крайней мере, в Mobile Safari это переводит URL страницы в выпадающий список истории, к которому пользователь может получить доступ. Но когда он добавляет запись для посещения страницы в обычном режиме, он добавляет свой заголовок , что является предпочтительным. Таким образом, переходdocument.title
к этому приводит к тому же поведению.источник
источник
window.history.back()
функцию. Мы хотим запретить пользователям нажимать кнопку «Назад» в браузере, но в некоторых случаях мы предоставляем собственную кнопку «Назад» на странице. Есть ли способ заставить его работать?Этот код отключит кнопку возврата для современных браузеров, которые поддерживают HTML5 History API. В обычных условиях нажатие кнопки «Назад» возвращает вас на один шаг назад к предыдущей странице. Если вы используете history.pushState (), вы начинаете добавлять дополнительные подэтапы на текущую страницу. Это работает так: если вы должны были использовать history.pushState () три раза, а затем начать нажимать кнопку «Назад», первые три раза она вернется в эти подэтапы, а затем в четвертый раз вернется к предыдущая страница
Если вы объедините это поведение с прослушивателем
popstate
события, вы по сути сможете настроить бесконечный цикл подсостояний. Таким образом, вы загружаете страницу, нажимаете подсостояние, затем нажимаете кнопку «Назад», которая открывает подсостояние и также толкает другое, поэтому, если вы нажмете кнопку «Назад» снова, она никогда не выйдет из подсостояний, чтобы нажать , Если вы чувствуете, что необходимо отключить кнопку «Назад», это приведет вас туда.источник
no-back-button
... (Браузер также может отображатьсяno-back-button
в адресе бар тоже, что кажется некрасивым.) Чтобы быть справедливым, это не единственное решение, которое страдает от этого. Третий аргумент tohistory.pushState()
является URL-адресом и должен быть URL-адресом вашей текущей страницы: используйтеlocation.href
вместо этого.Для события «Ограничить браузер назад»
источник
источник
Это способ, которым я мог это сделать. Причудливое изменение window.location не сработало в chrome и safari. Бывает, что location.hash не создает запись в истории для chrome и safari. Так что вам придется использовать pushstate. Это работает для меня во всех браузерах.
источник
$(document).ready(function () { .... });
источник
event.persisted
?Эта статья на jordanhollinger.com - лучший вариант, который я чувствую. Похоже на ответ Бритвы, но немного яснее. Код ниже; Полные кредиты Джордан Холлингер:
Страница перед:
Страница без возврата JavaScript:
источник
Этот javascript не позволяет любому пользователю вернуться (работает в Chrome, FF, IE, Edge)
источник
Попробуйте с легкостью:
источник
Этот код протестирован с последними браузерами Chrome и Firefox.
источник
Очень простая и понятная функция, позволяющая ломать стрелку назад, не мешая при этом странице.
Преимущества:
onbeforeunload
setInterval
так, чтобы не сломать медленные браузеры и всегда работает.unbeforeunload
который прерывает пользователя модальным диалогом.Примечание: некоторые другие решения используют
onbeforeunload
. Пожалуйста , не используйтеonbeforeunload
для этой цели, при котором пользователи открывают диалоговое окно, когда пользователи пытаются закрыть окно, нажать клавишу Backarrow и т. Д. Такие модальности, какonbeforeunload
правило, подходят только в редких случаях, например, когда они действительно вносили изменения на экране и убежище. не спас их, не для этой цели.Как это устроено
Вот и все. Больше не надо возиться, нет мониторинга фоновых событий, больше ничего.
Используйте его за одну секунду
Чтобы развернуть, просто добавьте это в любом месте на вашей странице или в вашем JS:
источник
Похоже, это помогло нам отключить кнопку возврата в браузере, а также кнопку возврата назад.
источник
источник
Вы просто не можете и не должны этого делать. Тем не менее, но это может быть полезно
Работает у меня в Chrome и Firefox
источник
Попробуйте это, чтобы запретить кнопку возврата в IE, которая по умолчанию действует как «Назад»:
источник
Я считаю, что идеальное, но в то же время довольно простое решение, которым я пользуюсь уже много лет.
По сути, это назначение события «onbeforeunload» окна вместе с текущими событиями mouseenter / documentleave документа, поэтому предупреждение срабатывает только тогда, когда щелчки находятся за пределами области действия документа (которая затем может быть либо кнопкой «Назад», либо «Вперед» браузера).
источник
В современном браузере это работает:
источник
Ни один из наиболее востребованных ответов не сработал для меня в Chrome 79 . Похоже, что Chrome изменил свое поведение по отношению к кнопке Back после версии 75, смотрите здесь:
https://support.google.com/chrome/thread/8721521?hl=en
Однако в этой ветке Google ответ, предоставленный Azrulmukmin Azmi в самом конце, сработал. Это его решение.
Я не совсем понимаю, что он написал, но
history.back() / history.forward()
теперь для блокировки Back in Chrome 75+ требуется дополнительное .источник
Я создаю одну HTML-страницу (index.html). Я также создаю один (mechan.js) внутри (скрипт) папку / каталог. Затем я размещаю весь свой контент внутри (index.html), используя теги form, table, span и div по мере необходимости. Теперь вот трюк, который заставит назад / вперед ничего не делать!
Во-первых, тот факт, что у вас есть только одна страница! Во-вторых, использование JavaScript с тегами span / div для скрытия и отображения контента на той же странице при необходимости с помощью обычных ссылок!
Внутри index.html:
Внутри «mechan.js»:
Это выглядит странно, но обратите внимание на имена функций и вызовы, встроенный HTML и вызовы id тега span. Это должно было показать, как вы можете вставить другой HTML в один тег span на одной странице! Как Back / Forward может повлиять на этот дизайн? Это невозможно, потому что вы прячете объекты и заменяете других на одной странице!
Как скрыть и отобразить? Вот как это делается: Внутри функций в файле mechan.js при необходимости используйте:
Внутри index.html вызывайте функции через ссылки:
и
Надеюсь, у меня не болит голова. Извините, если я сделал :-)
источник
В моем случае это был заказ на покупку. Поэтому я отключил кнопку. Когда пользователь нажал назад, кнопка все еще была отключена. Когда они щелкнули назад еще раз, а затем нажали кнопку страницы, чтобы перейти вперед. Я знал, что их заказ был отправлен и пропущен на другую страницу.
В случае, когда страница фактически обновилась, что сделало бы кнопку (теоретически) доступной; Затем я смог отреагировать при загрузке страницы, что заказ уже отправлен, и перенаправить тоже.
источник
источник
javascript:
Написанное вами определяет метку JavaScript с именем «javascript». Я очень сомневаюсь, что вы это хотели; Я подозреваю, что вы путаетесьhref=javascript:...
с<script>
блоками JavaScript . 2.language="JavaScript"
перестал быть действительным<script>
атрибутом в HTML5. 3. Вышеуказанные 2 пункта не имеют большого значения; важно то,history.forward(1)
что не работает в Mobile Safari (по крайней мере).history.pushState()
Вместо этого используйте один из ответов.Вы можете просто поставить небольшой скрипт и затем проверить. Это не позволит вам посетить предыдущую страницу. Это сделано в JavaScript.
Функция window.onunload срабатывает при попытке перейти на предыдущую или предыдущую страницу через браузер.
Надеюсь это поможет.
источник
У меня была эта проблема с React.JS. (компонент класса)
И решить легко
Я использовал
HashRouter
отreact-router-dom
.источник
Просто установите
location.hash="Something"
, при нажатии кнопки назад хеш будет удален из URL, но страница не вернется. Этот метод хорош для предотвращения случайного возврата, но в целях безопасности вы должны создать свой бэкэнд для предотвращения повторного ответаисточник
источник