Um grande problema com aplicativos baseados em JavaScript é que eles quebram o botão Voltar. Se você atualizar o conteúdo da página com JavaScript em vez de carregar uma nova página do servidor, nenhuma entrada será feita no histórico do navegador; Assim, quando o usuário clica em Voltar, esperando voltar ao estado anterior, eles acabam no site anterior.
Arrastar e soltar é uma ótima maneira de os usuários interagirem com seus aplicativos da web. Mas os ganhos de usabilidade serão perdidos se, depois de passar o tempo na sua aplicação, os usuários clicarem no botão Voltar esperando voltar a uma página e, em vez disso, voltarem para a tela inicial. Neste artigo “Olá! Autor de HTML5 e CSS3 Rob Crowther mostra como usar a API de histórico do HTML5 para evitar esse destino.
O problema pode ser demonstrado simplesmente. Tudo o que você precisa é de uma função que atualize a página em resposta à atividade do usuário:
var times = 0;function doclick() {times++;document.getElementById('message').innerHTML ='Recorded ' + times + ' clicks';}
e um pouco de marcação:
Click MeRecorded 0 clicks
Na vida real, sua página da Web estaria fazendo algo mais complicado, como buscar novos conteúdos do servidor via AJAX, mas uma simples atualização é suficiente para demonstrar o conceito. Vamos ver o que acontece quando o usuário visita a página.
A função doclick () pode ser atualizada para aproveitar a API do histórico. Cada vez que a página é atualizada, ela também define o location.hash:
function doclick() {times++;location.hash = times;document.getElementById('message').innerHTML ='Recorded ' + times + ' clicks';}
Atualizar o histórico é apenas parte do problema; você também precisa poder atualizar o estado da página para corresponder ao estado no histórico.
Como você é quem gerencia o histórico, cabe a você gerenciar o estado da página. Para atualizar sua página em resposta ao location.hash sendo alterado, você pode ouvir o evento hashchange:
function doclick() {times++;location.hash = times;}window.onhashchange = function() {if (location.hash.length > 0) {times = parseInt(location.hash.replace('#',''),10);} else {times = 0;}document.getElementById('message').innerHTML ='Recorded ' + times + ' clicks';}
A função doclick () agora é responsável apenas por atualizar a variável times e alterar o hash. O evento hashchange está no objeto da janela; quando ocorre, você verifica se o hash existe. Em um aplicativo real, você também gostaria de verificar se ele tinha um valor válido. Em seguida, você define o valor das horas como o número no hash. Finalmente, você atualiza o documento para refletir o estado correto da página. Vamos ver este novo código:
A propriedade location.hash e o evento hashchange associado são úteis se você deseja marcar exibições específicas de seu aplicativo e permitir que o usuário navegue entre elas. O Gmail usa essa abordagem permitindo que você navegue entre sua caixa de entrada (#inbox), contatos (#contacts) e outras visualizações. Se você tiver uma conta do Gmail, observe o que acontece com o URL enquanto navega até várias páginas diferentes. depois clique novamente.
Mas no que diz respeito à informação de estado, o hash só permite armazenar uma string. Você poderia codificar um objeto mais complexo, mas o URL rapidamente se tornaria longo e pesado e não seria memorável para seus usuários. Se você precisar de informações mais complexas armazenadas como parte do histórico, uma abordagem melhor seria usar o hash como chave para extrair mais informações de estado de alguma loja. Embora você possa desenvolver sua própria abordagem para isso, o HTML5 forneceu uma API para fazer isso por você através do método history.pushState () e do evento popstate. Esses métodos permitem salvar e recarregar um objeto complexo.
Você aprendeu que gerenciar o histórico do navegador permite que o botão Voltar se comporte de maneira mais sensata no contexto de seu aplicativo, enquanto a API de microdados oferece acesso a informações semânticas estruturadas no conteúdo da página.
Quais usos você considera para essa técnica? Você desenvolveu um método diferente? Deixe-nos saber nos comentários.
Imagem em destaque / miniatura, voltar imagem via Shutterstock.