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?

Foi útil?

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> 

Descrição detalhada

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top