Запретить использование кнопки «Назад» (в IE) - PullRequest
12 голосов
/ 10 сентября 2008

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

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

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

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

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

Ответы [ 15 ]

41 голосов
/ 10 сентября 2008

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

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

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

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

5 голосов
/ 10 сентября 2008

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

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

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

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

4 голосов
/ 04 мая 2011

Я придумал небольшой взлом, который отключает кнопку возврата с помощью 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>
4 голосов
/ 10 сентября 2008

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

window.onBack = history.forward();

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

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

3 голосов
/ 10 сентября 2008

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

2 голосов
/ 10 сентября 2008

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

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

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

2 голосов
/ 10 сентября 2008

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

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

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

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

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

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

2 голосов
/ 10 сентября 2008

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

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

1 голос
/ 16 ноября 2008

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

1 голос
/ 10 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...