Pergunta

É possível detectar quando o usuário clica no botão Voltar do navegador?

Eu tenho um aplicativo Ajax e se conseguir detectar quando o usuário clica no botão Voltar posso exibir os dados apropriados de volta

Qualquer solução usando PHP, JavaScript é preferível.Inferno, uma solução em qualquer linguagem é boa, só preciso de algo que eu possa traduzir para PHP/JavaScript

Editar:Recorte e cole abaixo:

Uau, todas as respostas excelentes.Gostaria de usar o Yahoo, mas já uso as bibliotecas Prototype e Scriptaculous e não quero adicionar mais bibliotecas ajax.Mas ele usa iFrames o que me dá uma boa indicação para escrever meu próprio código.

Foi útil?

Solução

Existem várias maneiras de fazer isso, embora algumas funcionem apenas em determinados navegadores.Uma que eu sei de cara é incorporar um pequeno iframe quase invisível na página.Quando o usuário clica no botão Voltar, o iframe é navegado de volta, onde você pode detectar e atualizar sua página. Aqui é outra solução.

Você também pode visualizar a fonte em algo como o Gmail e ver como eles fazem isso.

Aqui está a propósito, uma biblioteca para o tipo de coisa que você procura

Outras dicas

Uma das minhas estruturas favoritas para fazer isso é Gerenciador de histórico do navegador do Yahoo!.Você registra eventos e ele liga de volta quando o usuário retorna a esse estado.E se você quiser saber como funciona, aqui está uma entrada divertida no blog sobre as decisões do Yahoo!feito ao projetá-lo.

Não há como saber quando um usuário clica no botão Voltar ou pressiona a tecla Backspace para voltar no navegador; no entanto, há outros eventos que acontecem em uma determinada ordem que são detectáveis.Esse exemplo javascript tem um método razoavelmente bom para detectar comandos de retorno:

A maneira tradicional, entretanto, é rastrear o movimento do usuário em seu site usando cookies ou páginas de referência.Quando o usuário vai para a página A, depois para a página B e aparece na página A novamente (especialmente quando não há link de B para A), você sabe que ele voltou - A pode detectar isso e redirecioná-lo ou não.

A biblioteca de interface do usuário do Yahoo, minha biblioteca JS favorita do lado do cliente, tem um excelente Gerenciador de histórico do navegador isso faz exatamente o que você está pedindo.

A maneira mais simples de verificar se você voltou para uma versão em cache da sua página, que precisa ser atualizada, é adicionar um elemento de entrada oculto que será armazenado em cache e você pode verificar se ele ainda tem seu valor padrão.

Basta colocar o seguinte dentro de sua tag corporal.Coloco o meu logo antes da etiqueta final.

<input type="hidden" id="needs-refresh" value="no">
<script>
    onload=function(){
        var e = document.getElementById("needs-refresh");
        if (e.value === "yes")
            location.reload();
        e.value = "yes";
    }
</script>

Eu configurei uma variável $wasPosted em $_SESSION com valor false.

Todas as minhas postagens passam pelo mesmo arquivo php e definem $wasPosted para true.

Todos header(location:) as solicitações são precedidas pela configuração $wasPosted para true.

Se $wasPosted é false então a página foi carregada após o uso dos botões de retroceder ou avançar.

O kit de ferramentas dojo possui funcionalidade para lidar com isso em javascript.Não acho que exista uma boa maneira de lidar com isso em PHP puro.

Aqui está a página de documentos que eles têm: http://dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/back-button-undo

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