Como o Gmail faz IE Voltar trabalho sem atualização?
Pergunta
O Gmail usa # quando você clica em um e-mail para distinguir a página (ação + Ajax). http://mail.google.com/mail/#inbox/1238e709e37a1394
eu encontrei: Google usando # em vez de pesquisa? na URL. Por quê?
Em FF ou Chrome você pode usar para avançar e voltar sem atualização entre estes urls: http://X.com/MyPage.aspx#1 http://X.com/MyPage.aspx#2 http://X.com/MyPage.aspx#3
Mas no IE a página de atualização e não conta os parâmetros após # quando uma ação de volta é feita.
Como o Gmail fazer a mágica acontece?
Solução 2
Isto é o que eu estava procurando: http://nix.lv/history/demo.html#3
encontrou em: Salvar a âncora na história IE6
Outras dicas
Eu posso dar-lhe a resposta para isso, porque eu tenho enfrentado e resolvido este problema.
Existem alguns conceitos para entender aqui primeiro:
- javascript não pode alterar o histórico do navegador diretamente.
- sempre que o URL base de um iframe nas mudanças de página, a história é atualizado. (Mas isso tem algumas peculiaridades com diferentes browsers).
- a url tem uma parte "hash": por exemplo, na
http://mail.google.com/mail#inbox
URL,#inbox
é a parte hash. Vamos chamá-lo de "haxixe". assimhttp://mail.google.com/mail
será nosso "URL base".
história de rastreamento por GMail é principalmente feita usando truques com base nesta "haxixe".
Assim, mais alguns conceitos:
- quando a URL na barra muda de endereço, a história é atualizado (a URL anterior vai para a história)
- quando o URL base é alterado, a página é recarregada.
- quando a parte hash da URL muda sem a URL base mudando, a página não é recarregado.
Então, quando você vai de http://mail.google.com/mail#inbox
para http://mail.google.com/mail#sent
, a página não refrescar .
Agora, se GMail fosse para obter uma notificação de evento quando o hash alterado, então gmail poderia tomar ações com base nisso. Infelizmente, não há eventos DOM que podem nos ajudar a capturar ações de história. Então, em vez (esta é a parte que mostra como eu superei o problema), corremos um loop infinito que verifica a existência de alterações no hash. Se observa uma mudança, então nós detectamos um clique para o "back" ou "forward" botão do navegador.
Ao resolver este, eu fiz uma ferramenta útil: URL analisador . Ele pode analisar GET parâmetros na URL, bem como parâmetros codificado no Hash. Dê a demo um go!
Felicidades!
Sobre este problema no IE: Eu não percebi que a solução baseada esta 'de hash' não funciona no IE (coitado do desenvolvedor linux).
Mas para o IE, você pode usar um iframe escondido, e usar o seu "url afeta história" propriedade para implementar história. Sei que esta afirmação carece de detalhes, mas que decorre da minha própria falta de experiência com o IE.
vou tentar esta solução, e acompanhamento:)
Eu encontrei uma série de links na internet, que fazem implementações adequadas de história usando iframe / localização hash. Eu não tinha paciência para desenterrar as diferenças entre interface de iframe em vários browsers.
Eu acho que eu preferiria o plugin jQuery . YUI tem um gerente de história também.
Felicidades!