Отключение кнопки «Назад» в браузере [закрыто]

StackOverflow https://stackoverflow.com/questions/87422

  •  01-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Эта модель более удобна для кнопки «Назад», чем модель Postback.

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

Вы не должны этого делать.

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

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

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

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

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

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

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

  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;
  }

Это в некоторой степени решит проблему. Код не проверен - только в качестве примера.

Кнопку «Назад» можно отключить во всех основных браузерах.Он просто использует хеш-значения, чтобы полностью отключить кнопку «Назад».Просто поместите эти 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> 

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

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

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

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

history.go(+1);

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

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

4 Ребята из Rolla давно (в далекой-далекой галактике) написали эту статью об отключении кнопки «Назад»: http://www.4guysfromrolla.com/webtech/111500-1.shtml

Мне удалось добиться этого, используя:

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

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

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

Отключить функциональность кнопки Brower Back с помощью JavaScript в ASP.NET | ASP.NET отключить кнопку Browser Back (с помощью JavaScript)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top