Ответ 1
Это невозможно, к сожалению. Однако рассмотрите модель навигации приложений. Вы используете Post/Redirect/Get PRG Model? http://en.wikipedia.org/wiki/Post/Redirect/Get?
Эта модель более удобна для обратной связи, чем модель Postback.
Я пишу приложение, которое, если пользователь ударит, может повторно отправить ту же информацию и испортить поток и целостность данных. Как отключить его для пользователей, у которых есть и без javascript?
Это невозможно, к сожалению. Однако рассмотрите модель навигации приложений. Вы используете Post/Redirect/Get PRG Model? http://en.wikipedia.org/wiki/Post/Redirect/Get?
Эта модель более удобна для обратной связи, чем модель Postback.
Вы не должны.
Вы можете прикрепить некоторые script к событию onbeforeunload страницы и подтвердить с пользователем, что они хотят делать; и вы можете пойти немного дальше и попытаться отключить его, но, конечно же, это будет работать только для пользователей, у которых включен javascript. Вместо этого посмотрите на переписывание приложения, чтобы вы не совершали транзакции на каждой странице submit, но только в конце процесса.
Я настоятельно призываю вас пойти на героическую длину, чтобы не допустить разрыва кнопки "Назад", это верный способ пожара оттолкнуть ваших пользователей и даже сделать его No.1 на Джейкоб Нильсен Топ 10 ошибок веб-дизайна в 1999 году.
Возможно, вы могли бы скорее задать вопрос: "Как избежать разрыва кнопки" Назад "для < insert your script here > ?
Если Скотт ответит рядом с меткой, подумайте о том, чтобы изменить поток на модель 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>
Вот предыдущая статья на нем: Запретить использование кнопки "Назад" (в IE)
Что бы вы ни придумали, чтобы отключить кнопку "Назад" , вы не сможете остановить кнопку "Назад" в будущих браузерах.
Если в конце цикла разработки я предлагаю вам попробовать некоторые предложения выше, но когда вы получите время, вы должны структурировать поток, чтобы кнопка "Назад" не мешала логике вашего сайта, она просто возвращает пользователя к как и ожидалось.
Верно, правильная проверка должна быть добавлена, чтобы убедиться, что дубликаты данных не испортили ситуацию. Однако, как и в моем случае, я не полностью контролирую данные, так как после моей формы я использую сторонний 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); это помешало мне загружать офисные файлы.
Найдите ниже ссылку
Отключить функциональные возможности кнопки браузера с помощью JavaScript в asp.net | ASP.Net отключить кнопку назад браузера (используя javascript)
http://www.aspdotnet-suresh.com/2011/11/disable-browser-back-button.html