Запретить использование кнопки "Назад" (в IE)

Таким образом, малые и средние предприятия на моем текущем месте работы хотят попытаться отключить кнопку «Назад» для определенных страниц. У нас есть страница, на которой пользователь делает выбор и отправляет их на обработку. В некоторых случаях им нужно ввести комментарий на другой странице.

Пользователи поняли, что им не нужно вводить комментарий, если они отправляют информацию и переходят на страницу с комментарием, а затем нажимают кнопку «Назад», чтобы вернуться на предыдущую страницу.

Я знаю, что есть несколько разных решений для этого (и многие из них намного элегантнее, чем отключение кнопки возврата), но это то, что у меня осталось. Можно ли запретить кому-либо вернуться на предыдущую страницу, изменив поведение кнопки «Назад». (например, submit -> return false sorta thing).

Из-за двойной публикации информации я не могу вернуть ее на предыдущую страницу, а затем перейти на текущую. Я могу только сделать это не прямо с текущей страницы. Я погуглил, но видел только сообщения, в которых говорилось, что он всегда будет возвращаться на предыдущую страницу. Я надеялся, что у кого-то есть безумные навыки кунг-фу, которые сделают это возможным.

Я понимаю, что все говорят, что это плохая идея, и я согласен, но иногда вам просто нужно делать то, что вам говорят.

+1 из-за того, что иногда приходится использовать DTWT.

Simon 04.05.2011 13:23

4GuysFromRolla тщательно изучил «Отключение кнопки возврата». <4guysfromrolla.com/webtech/111500-1.shtml> Я рекомендую вам прочитать эту статью, они также говорят вам, почему она не будет работать (во всех сценариях).

Espo 10.09.2008 20:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
12
2
32 607
15

Ответы 15

Отключение кнопки «Назад» выглядит как «грубая сила».

Другой вариант - перейти в модальное диалоговое окно, в котором нет командных кнопок, провести пользователей по рабочему процессу и закрыть диалоговое окно по завершении процесса.

Я полностью согласен с вами, но мне сказали, что это то, с чем я застрял.

kemiller2002 10.09.2008 20:16

Вы не зацикливаетесь на нем, вы не можете этого сделать. Это не жизнеспособное, действительное или этичное решение. ИСПРАВИТЬ КОД

Doug Moore 18.09.2008 01:17

Не могли бы вы переместить комментарий на предыдущую страницу и сделать его там обязательным полем?

Отключение кнопки возврата не будет работать.

У вас есть доступ к исходному коду на стороне сервера? Если это так, вы можете поставить галочку на первой странице, которая перенаправляет на вторую страницу, если информация уже была отправлена ​​(вам, очевидно, нужно использовать для этого сеансы). На прежней работе мы так обрабатывали многоэтапные заявки (заявка как заявка на прием).

Для этого просто нет надежного способа. Вы не можете гарантировать, что в 100% случаев вы сможете помешать пользователю делать это.

Имея это в виду, стоит ли прибегать к чрезвычайно экзотическим решениям, чтобы отключать "большую часть" времени? Это вам решать.

Удачи.

Из-за изоляции безопасности javascript в браузере вы не можете изменить то, что делает кнопка «Назад».

Возможно, вы могли бы сохранить в сеансе пользователя что-то, что указывает на необходимость комментария, и иметь любую страницу в приложении, которую пользователь пытается загрузить с перенаправлением на страницу комментариев?

Что, если пользователь закрывает свой браузер, когда попадает на страницу комментариев?

Я знаю, что у вас здесь не было выбора, но поскольку то, что они просят, кажется невозможным ...

Возможно, вы могли бы просто не считать элемент завершенным, пока пользователь не оставит комментарии. Таким образом, вам нужно будет отслеживать как выполняемые, так и завершенные элементы и делать это различие в пользовательском интерфейсе, но это может быть наиболее надежным методом.

Или просто поставить поле для комментария на странице формы?

Я видел это раньше:

window.onBack = history.forward();

Это определенно грязный хакер, и, если это вообще возможно, я бы попытался не отключать кнопку возврата. И пользователь, вероятно, все еще может довольно легко обойти это. И в зависимости от кеширования нельзя сказать, будет ли обработан код сервера или сначала будет запущена кешированная страница с JavaScript.

Так что да, используйте на свой страх и риск :)

Не нарушит ли ваш код это «требование»? «Из-за двойной публикации информации я не могу вернуть ее на предыдущую страницу, а затем перейти на текущую. Я могу только сделать так, чтобы она не уходила от текущей страницы»

Espo 10.09.2008 20:21

Я использовал веб-приложение, которое делало это раньше, и это было одной из самых разочаровывающих вещей.

Steven Benitez 17.11.2010 20:08

Согласен, я ненавижу сайты, которые делают это - я думаю, что это ломает сеть. Я также не участвовал в требованиях к проекту, в котором использовалась именно эта техника :)

David Mohundro 18.11.2010 00:25

Пример кода не имеет смысла. Он создает новую глобальную переменную с именем «onBack» и присваивает ей значение «undefined», поскольку history.forward () не имеет возвращаемого значения. Идея могла заключаться в window.onback = history.forward; (вызов window.forward при возникновении события onback - что не сработает, поскольку события onback нет). Код по-прежнему работает как вызов history.forward(), который отправляет пользователя обратно на страницу, на которой он был до нажатия кнопки возврата ...

Mira Weller 22.12.2016 23:04

В противном случае я согласен с тем, что это плохая идея ;-)

Mira Weller 22.12.2016 23:04

Нет, ты обречен. Даже если вы открываете страницу в другом браузере и скрываете кнопку «Назад», всегда есть клавиша Backspace.

Проблема с маркетологами и аналитиками состоит в том, что некоторые из них не понимают фундаментальную концепцию Интернета без гражданства. Они не понимают, что страница полностью, совершенно не знает, что браузер использует ее, и что абсолютный контроль над браузером полностью выходит за рамки возможностей веб-страниц.

Лучший способ отговорить пользователей нажимать кнопку «Назад» - убедиться, что ваша страница теряет все своих данных, когда они нажимают «Назад», например, страница комментариев - единственная точка, где данные могут быть сохранены, и если они действительно нажимают кнопку кнопку возврата, они должны снова выполнить все (подумайте в духе pragma: nocache).

Пользователи будут жаловаться, конечно, но они - причина того, что это богом забытое требование существует, верно?

Не делай этого, просто не делай этого. Это плохой дизайн интерфейса и заставляет браузер пользователя вести себя не так, как он ожидает.

Я бы расценил любой сценарий, который успешно остановил работу моей кнопки «Назад», как взлом, и ожидал бы, что команда IE выпустит исправление безопасности для него.

Кнопка «Назад» является частью их программного интерфейса, а не вашего веб-сайта.

В вашем конкретном случае я думаю, что лучше всего добавить на страницу событие выгрузки, которое предупреждает пользователя, если он не заполнил форму. На кнопку «Назад» это не повлияет, и пользователь будет предупрежден о своих действиях.

Кит на высоте. Статья «4 парня», на которую ранее ссылались, даже заканчивается: «После тщательного поиска я обнаружил, что по-прежнему нет способа полностью отключить кнопку« Назад »во всех случаях». Дох! Мне не нужно читать две статьи, чтобы прочитать последнюю!

rp. 10.09.2008 20:31

согласился Кит. На моей работе мы столкнулись с примерно такой же ситуацией, и спустя долгое время мы поняли, что было бы проще реорганизовать приложение, чтобы не отключать кнопку «Назад».

Jared 10.09.2008 22:44

Когда я нажимаю кнопку «Назад», и на веб-сайте появляется сообщение об ошибке «Страница больше не действительна», я не считаю это неожиданным, я понимаю, что поступил неправильно, я думаю, что большинство пользователей с этим согласны. Вы чувствуете себя виноватым за попытку переписать историю.

stuartdotnet 27.09.2012 03:56

@StuartDobson - да, и это стандартный способ. Пользователи все еще могут возвращаться и продолжать возвращаться, их браузер просто не перезагружает страницы.

Keith 27.09.2012 11:12

What the users have figured out is that they don't have to enter a comment if they submit the information and go to the page with the comment and then hit the back button to return to the previous page.

Тогда они, вероятно, также достаточно умны, чтобы ввести 'нет комментариев' в поле комментариев.

Вы можете попытаться заставить людей добавлять комментарии, но, вероятно, в конечном итоге вы получите плохое, непригодное для использования программное обеспечение, рассердите пользователей и все равно не получите комментариев. Обычно это хорошее время, чтобы сделать шаг назад и пересмотреть то, что вы делаете, с точки зрения пользователей.

Это тоже просто крик о каком-то плохом коде. Почему люди могут обойти комментарий, нажав кнопку "Назад"? Вы не решите плохой код, взломав браузер пользователя.

Doug Moore 18.09.2008 01:15

Вы должны защитить свое приложение от двойной отправки, а не нарушать пользовательский интерфейс, чтобы скрыть ошибку.

Как простое решение: попробуйте это. Вставьте туда панель обновления и кнопку и используйте javascript, чтобы скрыть ее, а затем нажмите ее при загрузке страницы. Да, я понимаю, что это приведет к тому, что ваша страница будет отправляться обратно при загрузке и может не работать, если javascript отключен, но, безусловно, поможет вам добиться приличного ответа на проблему с кнопкой возврата. Энди

Я придумал небольшой прием, который отключает кнопку «Назад» с помощью JavaScript. Проверял на chrome 10, firefox 3.6 и IE9:

<!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";
}
// If you want to skip the auto-positioning at the top of browser window,you can add the below code:
window.location.hash=' ';
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>

в IE9 это заставляет страницу прокручиваться вверх и не позволяет мне прокручивать страницу

chrism 13.02.2012 11:48

Вы можете запретить им вернуться на предыдущую страницу. location.replace() заменяет запись истории текущей страницы новой страницей, поэтому ...

page1.html: пользователь нажимает ссылку, ведущую на page2.html.

page2.html: пользователь нажимает ссылку, которая вызывает location.replace('page3.html');.

page3.html: пользователь нажимает кнопку "Назад" и переходит на page1.html.

Это может не подходить для выполнения POST, но вы можете отправить данные в веб-службу через AJAX, а затем вызвать location.replace ()

Если вы запускаете новое веб-приложение с нуля или у вас есть достаточно времени, чтобы доработать свое приложение, вы можете использовать JavaScript и AJAX, чтобы избежать использования истории браузера, функций возврата и пересылки.

  • Откройте свое приложение в новом окне до или сразу после входа в систему.
  • Если хотите, используйте параметры окна, чтобы скрыть панель навигации (с помощью кнопок назад и вперед).
  • Используйте AJAX для всех запросов к серверу, никогда не меняя URL-адрес расположения окна.
  • Используйте простой веб-API для получения данных и выполнения действий, а также для визуализации приложения с помощью JavaScript.
  • В истории окна будет только один URL.
  • Кнопки "назад" и "вперед" ничего не делают.
  • Окно может закрываться автоматически при выходе из системы.
  • Никакая информация не попадает в историю браузера, что может помочь в обеспечении безопасности.

Этот метод отвечает на вопрос, но он также противоречит передовой практике по нескольким причинам:

  • Кнопки «Назад» и «Вперед» должны работать должным образом.
  • Приложение не должно открывать новые окна браузера.
  • Приложение должно работать без JavaScript.

Пожалуйста, внимательно изучите свои требования и своих пользователей, прежде чем использовать эту технику.

Я не вижу такого решения:

function removeBack(){
	window.location.hash = "nbb";
	window.location.hash = "";
	window.onhashchange=function(){window.location.hash = "";}
}

Вероятно, это не сработало в Internet Explorer 2008 года: D

Mira Weller 22.12.2016 23:05

Другие вопросы по теме