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

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

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

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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

window.onBack = history.forward();

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

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

Ответ 4

Я придумал небольшой хак, который отключает кнопку "Назад" с помощью 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>

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

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

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

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

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

Ответ 8

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

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

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

Ответ 9

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

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

Ответ 10

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

Ответ 11

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

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

Удачи.

Ответ 12

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

Ответ 13

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

page1.html: пользователь щелкает ссылку, которая идет на страницу2.html

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

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

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

Ответ 14

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

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

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

  • Кнопки "Назад" и "Вперед" должны вести себя так, как ожидалось.
  • Приложение не должно открывать новые окна браузера.
  • Приложение должно работать без JavaScript.

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

Ответ 15

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

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