Desativando botão Voltar do navegador [fechado]
-
01-07-2019 - |
Pergunta
Eu estou escrevendo um aplicativo que se os hits usuário de volta, pode reenviar as mesmas informações e atrapalhar o fluxo e integridade dos dados. Como faço para desativá-la para usuários que estão com e sem javascript on?
Solução
Não é possível, infelizmente. No entanto, considerar o seu modelo de aplicações de navegação. Você está usando Post / Redirect / Get PRG Modelo? http://en.wikipedia.org/wiki/Post/Redirect/Get ?
Este modelo é o botão mais para trás amigável do que o modelo Postback.
Outras dicas
Você não deve.
Você pode anexar algum script para o evento onbeforeunload de uma página e confirme com o usuário que é o que eles querem fazer; e você pode ir um pouco mais longe e Tente desativá-lo mas é claro que só irá funcionar para os usuários que têm o JavaScript ativado. Em vez disso olhe para reescrever o aplicativo para que você não cometa transações em cada página apresentar, mas apenas no final do processo.
Eu recomendo vivamente que você para ir para comprimentos heróicos para evitar quebrar o botão voltar, é uma certeza fogo maneira de alienar os seus usuários e até mesmo fez para No.1 em Mais de Jacob Neilsen 10 web design Erros em 1999 .
Talvez você poderia considerar em vez de fazer a pergunta: "Como para evitar quebrar o botão Voltar para
resposta sucessos de se Scott perto da marca, considere alterar o fluxo para o modelo PRG. Se é outra coisa, em seguida, dar um pouco mais de detalhe e ver como podemos ajudar.
Eu vim com um pequeno hack que desativa o botão de volta usando JavaScript. Eu verifiquei no Chrome 10, Firefox 3.6 e 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>
A melhor opção é não depender de postbacks para controle de fluxo, no entanto, se você está preso com ele (por agora)
Você pode usar algo como isto:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(Now.AddSeconds(-1));
Response.Cache.SetNoStore();
Response.AppendHeader("Pragma", "no-cache");
Logo você vai descobrir que ele não funcionará em todos os navegadores, mas então você pode introduzir um cheque em seu código como:
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;
}
Isso vai resolver o problema, de certa forma, o Código não marcada - apenas para fins exemplos ..
É possível botão voltar disable em todos os principais navegadores. Ele só usa valores hash para desativar completamente o botão de volta. Basta colocar estas 5 linhas de código em sua página
<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>
Aqui está um post anterior sobre ele: evitar o uso do botão Voltar (no IE)
O que quer que você venha com a desativar o botão Voltar pode não parar o botão voltar no futuro navegadores.
Se o seu no final do ciclo de desenvolvimento Eu sugiro que você tente algumas sugestões acima, mas quando você começa o tempo você deve estruturar o seu fluxo para que o botão de volta não interfere com a lógica do seu site, ele simplesmente leva a parte de trás do usuário ao página anterior como eles esperam que ele faça.
É verdade, validação adequada deve ser adicionado para se certificar de dados duplicados não baralhar as coisas. No entanto, como no meu caso, eu não o controle total dos dados desde que eu estou usando alguns terceiro API partido depois da minha forma. Então eu usei este
history.go(+1);
Isto irá enviar utilizador para a frente para o "recibo" que é suposto vir após página de "pagamento" se tentarem voltar a página de "pagamento" (apenas dando um pagamento, por exemplo). Use com moderação, embora
Você pode postar os dados em cada formulário para uma janela _NEW. Isso irá desativar o botão Voltar em cada janela, mas sem javascript pode ser difícil para forçar o antigo fechada.
4 Guys from Rolla escreveu este artigo sobre como desativar o botão voltar há muito tempo (em uma galáxia muito, muito distante): http://www.4guysfromrolla.com/webtech/111500-1.shtml
Eu era capaz de fazer isso usando:
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();
Quando eu usei Response.Cache.SetCacheability (HttpCacheability.NoCache); que me impediu de fazer download de arquivos de escritório.
Encontre link abaixo
Desativar a funcionalidade do navegador botão de volta usando JavaScript no asp.net | ASP.Net botão voltar desativar navegador (usando javascript)
http: //www.aspdotnet-suresh. COM / 2011/11 / disable-browser-back-button.html