Ativando o Botão Voltar

Depois de alguns aprimoramentos, essa técnica se tornou muito melhor. Como esse post está desatualizado, considere ler sua continuação: Histórico para Navegação via JavaScript.

Depois de um longo tempo de pesquisa, mais um tempinho para testes e melhoramentos, descobri um script que nos permite manipular o botão voltar. Como em Ajax a navegação é completamente por JavaScript, o botão voltar não é ativado de maneira alguma, certo? É, quase. Existe um código extremamente complicado que faz o botão ser ativado. Nem vou explica-lo, vou deixar vocês sofrerem pra descobrir:

top.location = "#hash";

Esse é equivalente a <a href=”#hash”>. Como sabemos, âncoras (ou hashes) ativam o botão voltar. Tudo certo, eureka, descobrimos a América, um viva para nós. Mas existe um pequeno inconveniente: quando clicamos no botão voltar, ele não ativa nenhum evento no navegador. Isso mesmo, pode procurar em todas as referências que você conhece.

E agora??? Volte ao início da teoria do JavaScript. Você lembrará de uma simples função:

setInterval("history(false)", 100);

Isso te faz pensar em algo? Uma função executada a cada 1/10 de segundo? Ou qualquer outro intervalo pequeno. É esse “artifício” (legítima gambiarra, mas necessária) que usaremos para verificar se o usuário voltou, avançou ou recarregou a página.

Agora vamos montar um pedaço de nosso script:

var local = "";
window.onLoad = setInterval("history(false)", 100);
function request( x ) {
	ajax(url + "?id=" + x); // Aqui uma função que faça a requisição Ajax
	top.location = "#" + x; // Pode ser trocado por um link com hash
	history(true); // Chama a função de histórico
}

Agora preste atenção em alguns detalhes importantes: a função history foi chamada duas vezes, com false e outra vez com true. Esse parâmetro serve para dizer a função que o usuário (se for true) chamou a função ou foi pelo intervalo (caso for false). Outro detalhe: a variável “local” é a variável que dirá a função history em qual local (na página, lembre-se disso) estamos.

Curioso? Então vamos adiante, para a outra função do nosso script: history. Apertem os cintos e vamos decolar. Se você tem estômago fraco ou é cardíaco, recomendo… continuar, não tem nada de assustador, é extremamente simples:

function history(fromUser) {
  localHash = location.hash.split("#")[1];
  if (fromUser){
    local = localHash;
  }
  else if (local != localHash){
        request(localHash);
  }
}

Agora preste atenção novamente. Lembra do “local” (eu avisei pra não esquecer…)? Agora temos outro local, “localHash”, que é o local para onde o hash aponta. O nosso hash servirá de query string, se já deu pra notar. O que está no hash vai para a outra função em determinada situação.

Se “fromUser” for true (veio do usuário), não nos preocupamos e passamos localHash direto para o nosso local. Se for via intervalo, verificamos se “local” é igual a “localHash”. Se não for, executamos uma nova requisição. E é só isso! Apenas 9 linhas de código para a nossa função de histórico! Acabamos com todas as 7 cabeças do dragão. Espero que saibam usar, já que para muitas query strings o negócio fica mais complicado. Bom proveito!

Depois de alguns aprimoramentos, essa técnica se tornou muito melhor. Como esse post está desatualizado, considere ler sua continuação: Histórico para Navegação via JavaScript.

Posts Relacionados

Postado em outubro 20, 2006 às 22:34

Comentários

  1. Micox

    Hoeeeeee
    Ótima solução.
    Irei testar este FDS.

    Só acho que complicou um pouco na explicação. Ficou meio fora de ordem, sei lá. hehehe
    Tive que ler de trás pra frente, frente pra trás, etc. Mas eu sei como estas paradas são complicadas.

    Parabéns. Se funcionar mesmo indicarei prum monte de gente essa sua solução.
    Ah, já estou assinando seus feeds :)


  2. JulioGreff

    Desculpem pela confusão… Mas é que o negócio é confuso ou é tudo de uma vez só, fiz da maneira que achei melhor. E valeu MicoX, pela assinatura.


  3. Dekassegui

    Informação valiosa!
    Muito obrigado e parabéns pela iniciativa.

    O “principio ativo” têm lógica simples e racional. Deveria funcionar em todos os navegadores, porém encontrei problemas sob certas condições de uso em algumas marcas/versões de navegadores. Foi implementado num objeto estático (Singleton) usando XHR+XSLT (no cliente), testado em servidor HTTP e desktop, com total satisfação somente no Mozilla. Quando os “engines” das demais marcas evoluirem, essa será a solução suficiente em qqr condição.

    []’s.


  4. Ronan

    Agora é eu aprender como colocar isso no meu site.


  5. Thiago Henrique

    Da uma exemplo de como utilizar porque nao estou conseguindo usar
    obrigado


  6. Cau Guanabara

    Parti desse script do Júlio e criei um que funciona também no IE.

    http://cauguanabara.blogspot.com/2006/11/histrico-do-browser-para-navegao-via.html

    Abraço, Cau


  7. Emiliano Eloi Silva Barbosa

    Ai camarada, JulioGreff, não conhecia seu blog, mas já virou lenda pra mim!!!!

    Muito bom!


  8. Marcelo Dênis

    só uma coisa: isso funciona em IE?


  9. Evandro

    Gaça isso para executar scripts

    if (window.execScript) {
    window.execScript(codigo, “javascript”)
    } else {
    window.eval(codigo);
    }


Trackbacks

  1. Pensamento Web :: Histórico do browser para navegação via Ajax :: November :: 2006 Novembro 15, 2006 @ 11:48
  2. Botão Voltar para IE « JulioGreff Novembro 15, 2006 @ 20:31

Deixe seu comentário