Как отключить кнопку BACK браузера (в разных браузерах)?
Отключить кнопку "Назад"
Ответ 1
Этот вопрос очень похож на этот один...
Для этого вам нужно заставить истечение срока действия кеша работать. Поместите следующий код на свой код страницы.
Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)
Ответ 2
Не отключайте ожидаемое поведение браузера.
Сделайте ваши страницы обработайте возможность перехода пользователей на страницу или две; не пытайтесь испортить их программное обеспечение.
Ответ 3
Я придумал небольшой хак, который отключает кнопку "Назад" с помощью 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>
Что он делает?
От комментариев:
Этот script использует тот факт, что браузеры рассматривают все, что приходит после знака "#" в URL-адресе, как часть истории просмотра. Что он делает, так это: когда страница загружается, к URL-адресу добавляется "# 1". Через 50 мс "1" удаляется. Когда пользователь нажимает "назад", браузер изменяет URL-адрес обратно до того, что он был до удаления "1", НО - это одна и та же веб-страница, поэтому браузеру не нужно перезагружать страницу. - Йосси Шашо
Ответ 4
Другие восприняли подход, чтобы сказать "не делай этого", но на самом деле это не отвечает на вопрос о плакате. Давайте просто предположим, что все знают, что это плохая идея, но нам любопытно, как это делается в любом случае...Вы не можете отключить кнопку "Назад" в пользовательском браузере, но вы можете сделать это так, чтобы ваше приложение ломалось (отображает сообщение об ошибке, требующее от пользователя начать работу), если пользователь вернется.
Один из подходов, который я видел для этого, - это передать токен на каждый URL-адрес приложения и внутри каждой формы. Маркер регенерируется на каждой странице, и как только пользователь загружает новую страницу, токены с предыдущих страниц становятся недействительными.
Когда пользователь загружает страницу, страница будет показывать только, был ли передан правильный токен (который был предоставлен всем ссылкам/формам на предыдущей странице).
Приложение онлайн-банкинга, предоставляемое моим банком, выглядит следующим образом. Если вы вообще используете кнопку "Назад", больше ссылок не будет работать, и больше не будет загружаться страница - вместо этого вы увидите уведомление о том, что вы не можете вернуться назад, и вам нужно начать все сначала.
Ответ 5
Осуждение вопроса, не зная контекста, немного суровое. Например, я хотел бы знать правильный способ сделать это: в настоящее время я запускаю онлайн-эксперимент по психологии, а иногда участники нажимают кнопку "Назад" (backspace или "delete", когда на Mac) вместо клавиши ввода, случайно. Это может потенциально испортить эксперимент и, таким образом, испортить данные (чего, к счастью, еще не произошло). Это, очевидно, случай, когда ввод необходимо ограничивать.
Конечно, я согласен с тем, что в правиле это очень плохая идея... но это уже было сделано ясно уже.
Ответ 6
Пока я сам ищу ответ, "Лучшая практика" - это... устаревшая... Так же, как и браузеры (действительно, браузеры уродливые окаменелости)
Лучшее/безопасное решение было бы для браузеров реализовать метод/запрос, где пользователь может предоставить странице возможность управлять интерфейсом.
Почему? Потому что для моего текущего проекта я создаю 100% встроенный JavaScript интерфейс и управляемый интерфейс. И кнопка "Назад" не имеет места в моем проекте, так как нет изменения страницы. (Т.е. кровавый быстро и без вспышек страницы из-за обновления. Также как реальное приложение!)
Я знаю, почему нет возможности "перехватывать" интерфейс, и я это понимаю. Но по крайней мере у нас должна быть возможность запросить его у браузера! Теперь это было бы "лучшей практикой" без опасностей, связанных с высокой нагрузкой.
Но браузеры, являющиеся браузерами. Я не ожидаю, что в этом отношении ничего не выйдет.
Ответ 7
Я искал тот же вопрос, и я нашел следующий код на сайте. Мысль поделиться этим здесь:
function noBack()
{
window.history.forward()
}
noBack();
window.onload = noBack;
window.onpageshow = function(evt){ if(evt.persisted) noBack(); }
window.onunload = function(){ void(0); }
Однако, как отмечают вышеперечисленные пользователи, это никогда не является хорошей практикой и его следует избегать по всем причинам.
Ответ 8
Если вы полагаетесь на технологию на стороне клиента, ее можно обойти. Например, Javascript может быть отключен. Или пользователь может выполнить JS script, чтобы обойти ваши ограничения.
Мое предположение заключается в том, что вы можете сделать это только на стороне сервера, отслеживая сеанс пользователя, и перенаправляя (как в Server.Transfer, а не Response.Redirect) пользователя/браузера на требуемую страницу.
Ответ 9
<body onLoad="if(history.length>0)history.go(+1)">
Ответ 10
Было несколько различных реализаций. Существует Flash-решение и некоторые решения iframe/frame для IE. Проверьте это
BTW: Существует множество веских причин отключить (или, по крайней мере, предотвратить 1 шаг) кнопку возврата - посмотрите на gmail в качестве примера, который реализует хеш-решение, обсуждаемое в этой статье.
Google "как ajax сломал кнопку" Назад ", и вы найдете множество статей по тестированию пользователей и правильность отключения кнопки" Назад ".
Ответ 11
У меня также была такая же проблема, используйте эту функцию Java script в теге head или in, ее 100% -ный рабочий режим не позволит вам вернуться.
<script type = "text/javascript" >
function preventBack(){window.history.forward();}
setTimeout("preventBack()", 0);
window.onunload=function(){null};
</script>
Ответ 12
Вы должны использовать сообщения с соответствующими истечениями и заголовками кеширования.
Ответ 13
Вместо того чтобы пытаться отключить кнопку назад, лучше ее поддерживать. .NET 3.5 может очень хорошо обрабатывать кнопки браузера (и вперед). Искать в Google: "Scriptmanager EnableHistory". Вы можете контролировать, какие действия пользователя будут добавлять запись в историю браузера (ScriptManager → AddHistoryPoint), и приложение ASP.NET получает событие, когда пользователь нажимает кнопки браузера Back/Forward. Это будет работать для всех известных браузеров.
Ответ 14
В глобальном масштабе отключение кнопки "назад" - это действительно плохая практика. Но в определенных ситуациях функциональность кнопки "Назад" не имеет смысла.
Здесь один из способов предотвратить нежелательную навигацию между страницами:
Верхняя страница (файл top.php
):
<?php
session_start();
$_SESSION[pid]++;
echo "top page $_SESSION[pid]";
echo "<BR><a href='secondary.php?pid=$_SESSION[pid]'>secondary page</a>";
?>
Вторичная страница (файл 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>";
}
?>
Эффект состоит в том, чтобы разрешить навигацию с верхней страницы вперед на вторичную страницу и обратно (например, Отменить), используя ваши собственные ссылки. Но, вернувшись на верхнюю страницу, кнопка назад браузера не сможет перейти на вторичную страницу.
Ответ 15
Даже я столкнулся с такой же ситуацией раньше... и не имел никакой помощи. попробуйте эти вещи, возможно, они будут работать для вас.
на странице входа <head>
:
<script type="text/javascript">
window.history.forward();
</script>
в Logout Button Я сделал это:
protected void Btn_Logout_Click(object sender, EventArgs e)
{
connObj.Close();
Session.Abandon();
Session.RemoveAll();
Session.Clear();
HttpContext.Current.Session.Abandon();
}
и на странице входа я сосредоточил свое внимание на текстовом поле Username следующим образом:
protected void Page_Load(object sender, EventArgs e)
{
_txtUsername.Focus();
}
надеюсь, что это поможет... :) кто-то PLZ научить меня, как редактировать эту страницу...
Ответ 16
ЕСЛИ вам нужно мягко подавлять клавиши удаления и возврата в своем веб-приложении, так что, когда они редактируют/удаляют элементы, страница не будет перенаправлена неожиданно, вы можете использовать этот код:
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);
Ответ 17
Попробуйте этот код. Вам просто нужно реализовать этот код на главной странице, и он будет работать для вас на всех страницах
<script type="text/javascript">
window.onload = function () {
noBack();
}
function noBack() {
window.history.forward();
}
</script>
<body onpageshow="if (event.persisted) noBack();">
</body>
Ответ 18
Проблема с Yossi Shasho Код заключается в том, что страница прокручивается вверху каждые 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(); });
Ответ 19
Это, похоже, сработало для нас.
history.pushState(null, null, $(location).attr('href'));
window.addEventListener('popstate', function () {
history.pushState(null, null, $(location).attr('href'));
});
Ответ 20
<script>
$(document).ready(function() {
function disableBack() { window.history.forward() }
window.onload = disableBack();
window.onpageshow = function(evt) { if (evt.persisted) disableBack() }
});
</script>