ti-enxame.com

Desativando o botão Voltar no navegador

Estou escrevendo um aplicativo que, se o usuário responder, poderá reenviar as mesmas informações e atrapalhar o fluxo e a integridade dos dados. Como faço para desativá-lo para usuários que estão com e sem o javascript ativado?

31
Haoest

Infelizmente não é possível. No entanto, considere seu modelo de navegação de aplicativos. Você está usando Post/Redirect/Get PRG Model? http://en.wikipedia.org/wiki/Post/Redirect/Get ?

Este modelo é mais amigável ao botão Voltar do que o modelo Postback.

76
Scott Hanselman

Você não deveria.

Você pode anexar algum script ao evento onbeforeunload de uma página e confirmar com o usuário que é isso que eles querem fazer; e você pode ir um pouco mais longe e tentar para desativá-lo mas é claro que isso só funcionará para usuários com o javascript ativado em. Em vez disso, reescreva o aplicativo para não confirmar transações em cada envio de página, mas apenas no final do processo.

12
blowdart

Exorto fortemente que você se esforce heroicamente para impedir a quebra do botão Voltar; é uma maneira segura de alienar seus usuários e chegou ao número 1 em Os 10 principais erros de design da web de Jacob Neilsen em 1999 =.

Talvez você deva considerar a pergunta: "Como evitar a quebra do botão Voltar para <insira seu cenário aqui>?"

Se a resposta de Scott chegar perto da marca, considere alterar seu fluxo para o modelo PRG. Se for outra coisa, dê um pouco mais de detalhes e veja como podemos ajudar.

8
Mike Tunnicliffe

Eu vim com um pequeno truque que desativa o botão voltar usando JavaScript. Eu verifiquei em 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>
7
Yossi Shasho

A melhor opção é não depender de postbacks para controlar o fluxo, no entanto, se você estiver preso a ele (por enquanto)

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");

Em breve, você descobrirá que ele não funcionará em todos os navegadores, mas poderá introduzir uma verificação no 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 resolverá o problema até certo ponto. Código não verificado - apenas para fins de exemplo.

5
Claus Thomsen

É possível desativar o botão Voltar em todos os principais navegadores. Ele apenas usa valores de hash para desativar completamente o botão Voltar. Basta colocar estas 5 linhas de código na 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> 

Descrição detalhada

4
bugwheels94

Aqui está um post anterior: Impedir o uso do botão Voltar (no IE)

3
kemiller2002

O que você criar para desativar o botão Voltar pode não parar o botão Voltar em navegadores futuros.

Se estiver atrasado no ciclo de desenvolvimento, sugiro que você tente algumas sugestões acima, mas quando tiver tempo, estruture seu fluxo para que o botão voltar não interfira na lógica do seu site, basta levar o usuário de volta à página anterior, como eles esperam que faça.

3
Keith

É verdade, a validação adequada deve ser adicionada para garantir que dados duplicados não atrapalhem as coisas. No entanto, como no meu caso, não tenho controle total dos dados, pois estou usando alguma API de terceiros após o meu formulário. Então eu usei isso

history.go(+1);

Isso encaminhará o usuário para o "recibo" que deve vir após a página "pagamento" se tentar voltar à página "pagamento" (apenas fornecendo um pagamento, por exemplo). Use com moderação, embora

1
katzmopolitan

Encontre abaixo o link

Desabilitar a funcionalidade do botão Voltar do navegador usando JavaScript no asp.net | ASP.Net desativar botão voltar do navegador (usando javascript)

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

0
Nimmanagottu

Consegui fazer isso usando:

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

Quando usei o Response.Cache.SetCacheability (HttpCacheability.NoCache); isso me impediu de baixar arquivos do office.

0
user825345

Você pode postar os dados em cada formulário em uma janela _NEW. Isso desativará o botão Voltar em cada janela, mas sem o javascript pode ser difícil forçar o fechamento da antiga.

0
skamradt

4 Caras da Rolla escreveram este artigo sobre como desativar o botão Voltar há muito tempo (em uma galáxia muito distante): http://www.4guysfromrolla.com/webtech/111500-1.shtml

0
torial