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.







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 :)
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.
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.
Agora é eu aprender como colocar isso no meu site.
Da uma exemplo de como utilizar porque nao estou conseguindo usar
obrigado
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
Ai camarada, JulioGreff, não conhecia seu blog, mas já virou lenda pra mim!!!!
Muito bom!
só uma coisa: isso funciona em IE?
Gaça isso para executar scripts
if (window.execScript) {
window.execScript(codigo, “javascript”)
} else {
window.eval(codigo);
}