21 ответов:
этот вопрос очень похож на этот один...
вам нужно заставить кэш истекать, чтобы это работало. Поместите следующий код на код страницы позади.
Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)
Не отключайте ожидаемое поведение браузера.
Сделайте ваши страницы обрабатывать возможность пользователей вернуться на страницу или две; не пытайтесь повредить их программное обеспечение.
Я придумал небольшой хак, который отключает кнопки "назад" с помощью 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 the back button! </body> </html>что он делает?
Из Комментариев:
этот скрипт использует тот факт, что браузеры рассматривают все, что происходит после входа "#" в URL-адрес, как часть истории просмотра. Что он делает это: когда страница загружается," #1 " добавляется в URL. После 50 мс "1" удаляется. Когда пользователь нажимает "назад", браузер меняет URL - адрес обратно на то, что было до удаления" 1", но-это та же веб-страница, поэтому браузеру не нужно перезагружать страницу. - Йосси Шашо
другие приняли подход, чтобы сказать:" не делайте этого", но это на самом деле не отвечает на вопрос плаката. Давайте просто предположим, что все знают, что это плохая идея, но нам все равно интересно, как это делается...
вы не можете отключить кнопку "Назад" в браузере пользователя, но вы можете сделать так, что ваше приложение ломается (отображает сообщение об ошибке, требующее от пользователя начать все сначала), если пользователь возвращается.
один из подходов, которые я видел на это делается для передачи маркера на каждый URL-адрес в приложении и в каждой форме. Маркер восстанавливается на каждой странице, и как только пользователь загружает новую страницу, все маркеры с предыдущих страниц становятся недействительными.
когда пользователь загружает страницу, страница будет отображаться только в том случае, если на нее был передан правильный токен (который был передан всем ссылкам/формам на предыдущей странице).
приложение для онлайн-банкинга my bank предоставляет следующее. Если вы используете кнопку назад, нет больше ссылок будет работать, и больше перезагрузок страниц не может быть сделано - вместо этого вы видите уведомление о том, что вы не можете вернуться, и вам нужно начать все сначала.
осуждать вопрос, не зная контекста, немного сурово. Я, например, хотел бы знать правильный способ сделать это: в настоящее время я запускаю онлайн-эксперимент по психологии, и иногда участники нажимают кнопку Назад (backspace или "удалить", когда на mac) вместо клавиши enter, случайно. Это может потенциально испортить эксперимент и таким образом разрушить данные (которые, к счастью, еще не произошло). Это, очевидно, случай, когда вход должен быть ограниченный.
конечно, я согласен, что в правило это очень плохая идея... но это уже было совершенно ясно.
пока я сам ищу ответ, "Лучшая практика" есть.... устаревший... Так же, как и браузеры.(На самом деле браузеры-это уродливые окаменелости)
лучшим / безопасным решением было бы для браузеров реализовать метод/запрос, где пользователь может предоставить странице возможность управлять интерфейсом.
Почему? Потому что для моего текущего проекта Я создаю 100% JavaScript встроенный и управляемый интерфейс.. И кнопка назад не имеет места в моем проекте, так как нет страницы изменение. (Т. е. кроваво быстро и не мигает страница из-за обновления.. Так же, как реальное приложение!)
Я знаю, почему возможность "highjack" интерфейс не существует, и я это понимаю. Но, по крайней мере, мы должны иметь возможность запросить его из браузера! Теперь это действительно было бы" лучшей практикой " без опасностей highjack.
но браузеры-это браузеры.. Я не ожидаю, что в этом отношении произойдет что-то выходящее.
Я искал тот же вопрос, и я нашел следующий код на сайте. Думал поделиться им здесь:
function noBack() { window.history.forward() } noBack(); window.onload = noBack; window.onpageshow = function(evt){ if(evt.persisted) noBack(); } window.onunload = function(){ void(0); }однако, как отмечалось выше пользователей, это никогда не является хорошей практикой и следует избегать по всем причинам.
Если вы полагаетесь на технологии на стороне клиента, его можно обойти. Например, Javascript может быть отключен. Или пользователь может выполнить сценарий JS, чтобы обойти ваши ограничения.
Я предполагаю, что вы можете сделать это только на стороне сервера отслеживания сеанса пользователя и перенаправления (как на сервере.Передача, а не ответ.Редирект) пользователь / браузер на нужную страницу.
было несколько различных реализаций. Существует флэш-решение и некоторые решения iframe/frame для IE. Проверьте это
кстати: есть много веских причин, чтобы отключить (или, по крайней мере, предотвратить 1 шаг) кнопку назад - посмотрите на gmail в качестве примера, который реализует хэш-решение, описанное выше статья.
Google "как ajax сломал кнопку назад", и вы найдете много статей о тестировании пользователей и действительности отключения кнопки Назад.
У меня также была та же проблема, используйте эту функцию Java script на Head tag или in , ее 100% работает нормально, не позволит вам вернуться.
<script type = "text/javascript" > function preventBack(){window.history.forward();} setTimeout("preventBack()", 0); window.onunload=function(){null}; </script>
вместо того, чтобы пытаться отключить кнопку браузера назад, лучше ее поддерживать. .NET 3.5 может очень хорошо обрабатывать кнопки браузера назад (и вперед). Поиск с помощью Google:"Scriptmanager EnableHistory". Вы можете контролировать, какие действия пользователя добавят запись в историю браузера (ScriptManager - > AddHistoryPoint) и ваш ASP.NET приложение получает событие всякий раз, когда пользователь нажимает кнопки браузера назад/вперед. Это будет работать для всех известных браузеров
в глобальном масштабе отключение кнопки "назад" действительно является плохой практикой. Но, в некоторых ситуациях, функциональность кнопки назад не имеет смысла.
вот один из способов предотвратить нежелательную навигацию между страницами:
Верхняя страница (file
top.php):<?php session_start(); $_SESSION[pid]++; echo "top page $_SESSION[pid]"; echo "<BR><a href='secondary.php?pid=$_SESSION[pid]'>secondary page</a>"; ?>вторичная страница (file
secondary.php):<?php session_start(); if ($_SESSION[pid] != $_GET[pid]) header("location: top.php"); else { echo "secondary page $_SESSION[pid]"; echo "<BR><a href='top.php'>top</a>"; } ?>эффект заключается в том, чтобы разрешить переход с верхней страницы вперед на вторичную страницу и обратно (например, отмена) используя свои собственные ссылки. Но после возвращения на верхнюю страницу кнопка "Назад" браузера не позволяет перейти на дополнительную страницу.
даже я сталкивался с такой же ситуацией раньше...и не было никакой помощи. попробуйте эти вещи, может быть, это будет работать для вас
на странице входа
<head>- тег:<script type="text/javascript"> window.history.forward(); </script>в кнопке выхода из системы я сделал это:
protected void Btn_Logout_Click(object sender, EventArgs e) { connObj.Close(); Session.Abandon(); Session.RemoveAll(); Session.Clear(); HttpContext.Current.Session.Abandon(); }и на странице входа в систему я поставил акцент на имя пользователя текстовое поле, как это:
protected void Page_Load(object sender, EventArgs e) { _txtUsername.Focus(); }надеюсь, что это помогает... :) кто-то plz научит меня, как редактировать эту страницу...
Если вам нужно мягко подавить клавиши delete и backspace в вашем веб-приложении, чтобы при редактировании / удалении элементов страница не перенаправлялась неожиданно, вы можете использовать этот код:
window.addEventListener('keydown', function(e) { var key = e.keyCode || e.which; if (key == 8 /*BACKSPACE*/ || key == 46/*DELETE*/) { var len=window.location.href.length; if(window.location.href[len-1]!='#') window.location.href += "#"; } },false);
попробуйте этот код. Вам просто нужно реализовать этот код на главной странице, и он будет работать для вас на всех страницах
<script type="text/javascript"> window.onload = function () { noBack(); } function noBack() { window.history.forward(); } </script> <body onpageshow="if (event.persisted) noBack();"> </body>
проблема с Йоси Shasho ' s Code заключается в том, что страницы прокрутка к началу каждые 50 мс. Поэтому я изменил этот код. Теперь он отлично работает на всех современных браузерах, IE8 и выше
var storedHash = window.location.hash; function changeHashOnLoad() { window.location.href += "#"; setTimeout("changeHashAgain()", "50"); } function changeHashAgain() { window.location.href += "1"; } function restoreHash() { if (window.location.hash != storedHash) { window.location.hash = storedHash; } } if (window.addEventListener) { window.addEventListener("hashchange", function () { restoreHash(); }, false); } else if (window.attachEvent) { window.attachEvent("onhashchange", function () { restoreHash(); }); } $(window).load(function () { changeHashOnLoad(); });
это, кажется, сработало для нас.
history.pushState(null, null, $(location).attr('href')); window.addEventListener('popstate', function () { history.pushState(null, null, $(location).attr('href')); });
<script> $(document).ready(function() { function disableBack() { window.history.forward() } window.onload = disableBack(); window.onpageshow = function(evt) { if (evt.persisted) disableBack() } }); </script>
попробуйте этот код. Работать на меня. Он в основном изменяет хэш, как только загружается страница, которая изменяет страницу недавней истории, добавляя "1" на URL. Поэтому, когда вы нажмете кнопку назад, он перенаправляет на ту же страницу каждый раз.
<script type="text/javascript"> var storedHash = window.location.hash; function changeHashOnLoad() { window.location.hash = "1";} window.onhashchange = function () { window.location.hash = storedHash; } </script> <body onload="changeHashOnLoad(); "> </bod>
Comments