La especificación del historial HTML5 es peculiar.
history.pushState()
no despacha un popstate
evento ni carga una nueva página por sí mismo. Solo estaba destinado a empujar al estado a la historia. Esta es una función de "deshacer" para aplicaciones de una sola página. Debe despachar manualmente un popstate
evento o utilizarlo history.go()
para navegar al nuevo estado. La idea es que un enrutador pueda escucharpopstate
eventos y hacer la navegación por usted.
Algunas cosas a tener en cuenta:
history.pushState()
y history.replaceState()
no despacharpopstate
eventos.
history.back()
, history.forward()
y los botones de avance y retroceso del navegador se despachanpopstate
de eventos.
history.go()
y history.go(0)
hacer una recarga de página completa y no enviarpopstate
eventos.
history.go(-1)
(atrás 1 página) y history.go(1)
(adelante 1 página) hacen popstate
eventos de despacho .
Puede usar la API de historial de esta manera para impulsar un nuevo estado Y enviar un evento popstate.
history.pushState({message:'New State!'}, 'New Title', '/link');
window.dispatchEvent(new PopStateEvent('popstate', {
bubbles: false,
cancelable: false,
state: history.state
}));
Luego escuche los popstate
eventos con un enrutador.