pushState e replaceState
Atualize a URL do navegador sem recarregar a página inteira.
pushState e replaceState é uma aula grátis de HTML Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de HTML Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de HTML Academy inclui 4 aulas no total.
A API History
A API History permite que uma página altere a URL exibida na barra de endereços sem iniciar uma navegação completa. Combinada à renderização no lado do cliente, ela possibilita criar Aplicações de página única com aparência nativa, sem abrir mão de URLs que podem ser adicionadas aos favoritos.
pushState
history.pushState(state, "", url) adiciona uma nova entrada ao histórico do navegador. A URL na barra de endereços é atualizada imediatamente; nenhuma solicitação de rede é feita. O usuário pode voltar à entrada anterior usando o botão Voltar do navegador.
history.pushState({ view: "settings" }, "", "/settings");O argumento state
O primeiro argumento é formado por dados serializáveis arbitrários anexados à entrada. Leia-os posteriormente por meio de history.state ou em eventos popstate. Use esse argumento para passar o estado da interface (qual aba estava aberta ou a posição da rolagem), permitindo que a navegação de retorno restaure exatamente a visualização anterior.
O argumento do título
O segundo argumento é o título da entrada. Na prática, todos os navegadores modernos o ignoram — defina document.title = "..." diretamente para alterar o título. Passe um valor vazio por convenção; isso não tem efeito.
O argumento url
O terceiro argumento é o novo endereço. Endereços relativos são resolvidos com base na página atual; o novo endereço deve ter a mesma origem (uma origem cruzada lança SecurityError). Os navegadores não buscam o endereço — pushState apenas atualiza a barra de endereço e o histórico.
replaceState
history.replaceState(state, "", url) substitui a entrada atual do histórico em vez de adicionar uma nova. Use quando quiser atualizar o endereço sem criar um novo passo de navegação para trás (por exemplo, ao atualizar uma cadeia de consulta de filtro).
// Update query string in place
const url = new URL(location);
url.searchParams.set("filter", "open");
history.replaceState(null, "", url);Casos de uso de pushState
Alterações de rota na SPA (clicar em um link de navegação sem recarregar a página inteira), abertura de uma janela modal (para que o botão Voltar feche a janela), transições entre etapas de um assistente. Cada estado significativo deve ser uma nova entrada do histórico, para que o botão Voltar faça o que os usuários esperam.
Casos de uso de replaceState
Atualizações de filtros, ordenação e paginação que não devem encher o histórico, redirecionamento após a conclusão parcial de um formulário, atualização de parâmetros de rastreamento sem criar entradas navegáveis. Ao pressionar Voltar, o usuário ignora esses estados "intermediários".
Atualizar a visualização após pushState
pushState apenas altera o endereço — seu código deve atualizar o DOM separadamente. O padrão é: renderizar o novo conteúdo e depois chamar pushState. Juntos, os dois produzem a experiência de uma SPA.
function navigate(path) {
renderPage(path);
history.pushState(null, "", path);
window.scrollTo(0, 0);
}Atualizações do título e dos metadados
Atualize document.title e os metadados de título depois da navegação, para que o compartilhamento em redes sociais e os títulos das abas do navegador reflitam a visualização atual. Esquecer isso deixa o título original nos compartilhamentos seguintes — um erro sutil, mas comum, em uma SPA.
pushState inicial ao carregar a página
Chamar pushState antes de o usuário navegar sobrescreve a entrada inicial. Para associar um estado à primeira entrada da página, use replaceState — isso adiciona o estado sem alterar a profundidade do histórico.
Restrição de segurança
Os endereços usados por pushState devem ter a mesma origem. Tentar executar pushState com https://evil.com lança SecurityError. Isso impede que as páginas falsifiquem a barra de endereço para fazer os usuários pensarem que estão em outro site.
Verificação de conhecimento
O que history.replaceState faz que history.pushState não faz?
Resumo
pushState adiciona uma nova entrada ao histórico sem recarregar a página — a base do roteamento de SPA. replaceState atualiza a entrada atual no próprio lugar para alterações meramente visuais no endereço. Ambos exigem endereços com a mesma origem e ignoram o argumento de título. Sempre atualize o DOM separadamente e lembre-se de atualizar document.title e os metadados depois da navegação.
Perguntas Frequentes
A aula “pushState e replaceState” é grátis?
Sim — o texto completo de “pushState e replaceState” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de HTML Academy, atualize para CoddyKit PRO. O curso de HTML Academy inclui 4 aulas no total.
O que vou aprender em “pushState e replaceState”?
Atualize a URL do navegador sem recarregar a página inteira. Você pratica HTML Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar HTML Academy?
Nenhuma experiência prévia é necessária. HTML Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “pushState e replaceState”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de HTML Academy?
Sim. Cada aula de HTML Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- pushState e replaceState
- O evento popstate
- Roteamento baseado em hash versus baseado em caminho
- A API Navigation em navegadores modernos