Desativar o botão Voltar do navegador

Como desativar o botão BACK do navegador (em todos os navegadores)?

Esta questão é muito semelhante a esta …

Você precisa forçar o cache a expirar para que isso funcione. Coloque o seguinte código no seu código de página.

Page.Response.Cache.SetCacheability(HttpCacheability.NoCache) 

Não desabilite o comportamento esperado do navegador.

Faça com que suas páginas lidem com a possibilidade de os usuários voltarem uma página ou duas; não tente prejudicar seu software.

Eu criei um pequeno hack que desativa o botão de voltar usando JavaScript. Eu verifiquei no Chrome 10, Firefox 3.6 e IE9:

   Untitled Page    Try to hit the back button!   

O que isso está fazendo?

De comentários:

Este script aproveita o fato de que os navegadores consideram o que vem depois do sinal “#” no URL como parte do histórico de navegação. O que acontece é isto: quando a página é carregada, “# 1” é adicionado ao URL. Após 50 ms, o “1” é removido. Quando o usuário clica em “voltar”, o navegador altera o URL de volta para o que era antes de “1” ser removido, MAS – é a mesma página da Web, portanto, o navegador não precisa recarregar a página. – Yossi Shasho

Outros adotaram a abordagem para dizer “não faça isso”, mas isso não responde realmente à pergunta do autor. Vamos supor que todos saibam que isso é uma má ideia, mas estamos curiosos sobre como isso é feito de qualquer maneira …

Você não pode desativar o botão Voltar no navegador do usuário, mas pode fazê-lo interromper o aplicativo (exibe uma mensagem de erro, exigindo que o usuário inicie novamente) se o usuário voltar.

Uma abordagem que vi para fazer isso é passar um token em cada URL dentro do aplicativo e dentro de cada formulário. O token é gerado novamente em todas as páginas e, quando o usuário carrega uma nova página, os tokens das páginas anteriores são invalidados.

Quando o usuário carrega uma página, a página só mostrará se o token correto (que foi dado a todos os links / formulários na página anterior) foi passado para ele.

O aplicativo bancário on-line que meu banco fornece é assim. Se você usar o botão voltar, nenhum outro link funcionará e não será possível fazer mais recarregamentos de página. Em vez disso, você verá um aviso informando que não pode voltar e precisa recomeçar.

Condenar a questão sem conhecer o contexto é um pouco duro. Eu, por exemplo, adoraria conhecer a maneira correta de fazer isso: atualmente estou fazendo um experimento de psicologia on-line e, às vezes, os participantes pressionam o botão voltar (retrocesso ou ‘delete’ quando estão em um mac) em vez da tecla enter. por acaso. Isso pode estragar o experimento e, assim, arruinar os dados (o que, felizmente, ainda não aconteceu). Este é obviamente um caso em que a input precisa ser confinada.

É claro que concordo que na regra isso é uma idéia muito ruim … mas isso já ficou claro abundantemente.

Enquanto eu estou procurando a resposta sozinho, “Best Practice” é …. desatualizado … Assim como os navegadores são. (Realmente navegadores são fósseis feios)

A melhor / mais segura solução seria que os navegadores implementassem um método / solicitação em que o usuário pudesse conceder à página a capacidade de controlar a interface.

Por quê? Porque para o meu projeto atual eu estou construindo uma interface 100% construída e controlada por JavaScript. E o botão voltar não tem lugar no meu projeto, já que não há mudança de página. (Ou seja, muito rápido e sem flashes de página por causa de uma atualização .. Assim como uma aplicação real!)

Eu sei porque a capacidade de “highjack” a interface não está lá, e eu entendo isso. Mas, pelo menos, devemos ter a capacidade de solicitá-lo a partir do navegador! Agora isso seria verdadeiramente “melhor prática” sem os perigos do highjack.

Mas navegadores sendo navegadores .. Eu não espero que nada exista acontecer a este respeito.

Eu estava procurando a mesma pergunta e encontrei o seguinte código em um site. Pensei em compartilhar aqui:

 function noBack() { window.history.forward() } noBack(); window.onload = noBack; window.onpageshow = function(evt){ if(evt.persisted) noBack(); } window.onunload = function(){ void(0); } 

No entanto, como observado pelos usuários acima, isso nunca é uma boa prática e deve ser evitado por todos os motivos.

Se você confiar na tecnologia do lado do cliente, ela pode ser contornada. Javascript pode estar desativado, por exemplo. Ou o usuário pode executar um script JS para contornar suas restrições.

Meu palpite é que você só pode fazer isso pelo rastreamento do lado do servidor da session do usuário e redirecionando (como em Server.Transfer, não Response.Redirect) o usuário / navegador para a página necessária.

  

Houve algumas implementações diferentes. Existe uma solução flash e algumas soluções iframe / frame para o IE. Veja isso

http://www.contentwithstyle.co.uk/content/fixing-the-back-button-and-enabling-bookmarking-for-ajax-apps

BTW: Existem vários motivos válidos para desativar (ou pelo menos evitar 1 passo) um botão de retorno – veja o gmail como um exemplo que implementa a solução de hash discutida no artigo acima.

Google “como ajax quebrou o botão de volta” e você encontrará muitos artigos sobre o teste do usuário e a validade da desativação do botão Voltar.

Eu também tive o mesmo problema, use esta function de script Java na tag head ou em, 100% funcionando bem, não deixaria você voltar.

   

Você deve usar postagens com vencimentos e headers de cache apropriados.

Em vez de tentar desativar o botão Voltar do navegador, é melhor suportá-lo. O .NET 3.5 pode muito bem lidar com os botões voltar (e avançar) do navegador. Pesquise com o Google: “Scriptmanager EnableHistory”. Você pode controlar quais ações do usuário adicionarão uma input ao histórico do navegador (ScriptManager -> AddHistoryPoint) e seu aplicativo ASP.NET receberá um evento sempre que o usuário clicar nos botões Voltar / Avançar do navegador. Isso funcionará para todos os navegadores conhecidos

Globalmente, desativar o botão Voltar é, na verdade, uma prática ruim. Mas, em certas situações, a funcionalidade do botão Voltar não faz sentido.

Aqui está uma maneira de impedir a navegação indesejada entre as páginas:

Top page (arquivo https://stackoverflow.com/questions/961188/disable-browsers-back-button/top.php ):

 secondary page"; ?> 

Página secundária (arquivo secondary.php ):

 top"; } ?> 

O efeito é permitir a navegação da página principal para frente para a página secundária e vice-versa (por exemplo, Cancelar) usando seus próprios links. Mas, depois de retornar à página inicial, o botão Voltar do navegador é impedido de navegar para a página secundária.

Mesmo eu enfrentei a mesma situação antes … e não tive nenhuma ajuda. tente estas coisas, talvez estas funcionem para você

na página de login tag:

  

no botão de logout eu fiz isso:

 protected void Btn_Logout_Click(object sender, EventArgs e) { connObj.Close(); Session.Abandon(); Session.RemoveAll(); Session.Clear(); HttpContext.Current.Session.Abandon(); } 

e na página de login eu coloquei o foco na checkbox de texto Username assim:

 protected void Page_Load(object sender, EventArgs e) { _txtUsername.Focus(); } 

espero que isso ajude … 🙂 alguém plz me ensinar como editar esta página …

Se você precisar suavemente suprimir as chaves de exclusão e retrocesso em seu aplicativo da Web, para que quando eles estiverem editando / excluindo itens, a página não seja redirecionada inesperadamente, você poderá usar este código:

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

Tente este código. Você só precisa implementar este código na página mestra e ele funcionará para você em todas as páginas

    

O problema com o código do Yossi Shasho é que a página está rolando para o topo a cada 50 ms. Então eu modifiquei esse código. Agora está funcionando bem em todos os navegadores modernos, IE8 e acima

 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(); }); 

Isso parece ter funcionado para nós.

 history.pushState(null, null, $(location).attr('href')); window.addEventListener('popstate', function () { history.pushState(null, null, $(location).attr('href')); }); 
  

Tente este código. Trabalhou para mim. Ele basicamente altera o hash assim que a página é carregada, o que altera a página do histórico recente adicionando “1” no URL. Então, quando você aperta o botão Voltar, ele redireciona para a mesma página toda vez.