A especificação do histórico do HTML5 é peculiar.
history.pushState()
não despacha um popstate
evento ou carrega uma nova página por si só. Era apenas para empurrar o estado para a história. Este é um recurso "desfazer" para aplicativos de página única. Você deve despachar manualmente um popstate
evento ou usar history.go()
para navegar para o novo estado. A idéia é que um roteador possa ouvir popstate
eventos e fazer a navegação por você.
Algumas coisas a serem observadas:
history.pushState()
e history.replaceState()
não despache popstate
eventos.
history.back()
, history.forward()
E as costas do navegador e botões de avançar fazer expedição popstate
eventos.
history.go()
e history.go(0)
recarregue a página inteira e não envie popstate
eventos.
history.go(-1)
(voltar 1 página) e history.go(1)
(avançar 1 página) enviam popstate
eventos.
Você pode usar a API do histórico como esta para enviar um novo estado E enviar um evento popstate.
history.pushState({message:'New State!'}, 'New Title', '/link');
window.dispatchEvent(new PopStateEvent('popstate', {
bubbles: false,
cancelable: false,
state: history.state
}));
Em seguida, ouça popstate
eventos com um roteador.