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

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

Ответ 1

Это невозможно, к сожалению. Однако рассмотрите модель навигации приложений. Вы используете Post/Redirect/Get PRG Model? http://en.wikipedia.org/wiki/Post/Redirect/Get?

Эта модель более удобна для обратной связи, чем модель Postback.

Ответ 2

Вы не должны.

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

Ответ 3

Я настоятельно призываю вас пойти на героическую длину, чтобы не допустить разрыва кнопки "Назад", это верный способ пожара оттолкнуть ваших пользователей и даже сделать его No.1 на Джейкоб Нильсен Топ 10 ошибок веб-дизайна в 1999 году.

Возможно, вы могли бы скорее задать вопрос: "Как избежать разрыва кнопки" Назад "для < insert your script here > ?

Если Скотт ответит рядом с меткой, подумайте о том, чтобы изменить поток на модель PRG. Если это что-то еще, тогда давайте немного подробнее и посмотрим, как мы можем помочь.

Ответ 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";
}

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 back!
</body>
</html>

Ответ 5

Лучший вариант заключается не в том, чтобы зависеть от обратной передачи для управления потоком, однако, если вы застряли с ним (пока)

вы можете использовать что-то вроде этого:

  Response.Cache.SetCacheability(HttpCacheability.NoCache);
  Response.Cache.SetExpires(Now.AddSeconds(-1));
  Response.Cache.SetNoStore();
  Response.AppendHeader("Pragma", "no-cache");

Вскоре вы обнаружите, что он не будет работать во всех браузерах, но затем вы можете ввести чек в свой код, например:

 if (Page.IsPostBack)
 {
        if (pageIsExpired()){
           Response.Redirect("/Some_error_page.htm");
        }
        else {
           var now = Now;
           Session("TimeStamp") = now.ToString();
           ViewState("TimeStamp") = now.ToString();
        }

  private boolean pageIsExpired()
  {
     if (Session("TimeStamp") == null || ViewState("TimeStamp") == null)
        return false;

     if (Session("TimeStamp") == ViewState("TimeStamp"))
        return true;

        return false;
  }

Это позволит решить проблему до некоторой степени, код не проверен - только для примеров.

Ответ 6

Можно отключить кнопку "Назад" во всех основных браузерах. Он просто использует хеш-значения, чтобы полностью отключить кнопку "Назад". Просто разместите эти 5 строк кода на своей странице

 <script>
window.location.hash="no-back-button";
window.location.hash="Again-no-back-button";//for google chrome
window.onhashchange=function(){window.location.hash="no-back-button";}
</script> 

Подробное описание

Ответ 8

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

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

Ответ 9

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

history.go(+1);

Это приведет к переходу пользователя на "квитанцию", которая должна появиться после страницы "оплата", если они попытаются вернуться на страницу "оплата" (например, для оплаты). Используйте экономно, хотя

Ответ 10

Вы можете опубликовать данные в каждой форме в окне _NEW. Это отключит кнопку "Назад" в каждом окне, но без javascript может быть трудно заставить старый закрыть.

Ответ 12

Я смог выполнить это, используя:

 Response.Cache.SetExpires(DateTime.MinValue);
 Response.Cache.SetNoStore();

Когда я использовал Response.Cache.SetCacheability(HttpCacheability.NoCache); это помешало мне загружать офисные файлы.

Ответ 13

Найдите ниже ссылку

Отключить функциональные возможности кнопки браузера с помощью JavaScript в asp.net | ASP.Net отключить кнопку назад браузера (используя javascript)

http://www.aspdotnet-suresh.com/2011/11/disable-browser-back-button.html