History.pushState()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
En un documento HTML, el método history.pushState()
anexa un registro en la sesión de historial del navegador.
Sintaxis
history.pushState(state, title, [url])
Parámetros
state
-
El objeto
state
es un objeto de JavaScript asociado al nuevo registro en el historial creado porpushState()
. Cuando el usuario navega al nuevo registro, un eventopopstate
es accionado, y la propiedadstate
del evento contiene una copia del objetostate
del registro en el historial.El objeto
state
puede ser cualquier cosa que pueda ser serializada. Porque Firefox guarda los objetosstate
en el disco del usuario para que así puedan ser restaurados luego de que el usuario reinicia el navegador, se impone un límite de 640k caracteres en la representación serializada de un objetostate
. Si pasas un objetostate
con una representación serializada más grande que lo mencionado, apushState()
, el método arrojará una excepción. Si necesitas más espacio que el mencionado, es recomendable que usessessionStorage
y/olocalStorage
. title
-
La mayoría de los navegadores ignoran este parámetro, sin embargo, podrían usarlo en el futuro. Pasar una cadena de texto vacía aquí, debería ser seguro contra futuros cambios en el método. Alternativamente, podrías pasar un título corto por el estado al cual te estás moviendo. Si necesitas que el título sea modificado, puedes usar
document.title
. url
Opcional-
La URL del nuevo registro en el historial, se define en este parámetro. Es importante destacar que el navegador no intentará cargar esta URL luego de una llamada a
pushState()
, pero podría intentar cargar esta URL luego, por ejemplo, luego de que el usuario reinicie el navegador. La nueva URL no necesita ser absoluta; puede ser relativa a la URL actual. La nueva URL debe tener el mismo origin que la URL actual; de otra manera,pushState()
arrojará una excepción. Si este parámetro no es especificado, por defecto se usa la URL del documento actual.
Descripción
En cierto sentido, llamar a pushState()
es similar a window.location = "#foo"
, ambos crearán y activarán un nuevo registro en el historial asociado al documento actual. Pero pushState()
tiene unas ventajas adicionales:
- La nueva URL pueded ser cualquier URL con el mismo origen que la URL actual. En contraste, usar
window.location
te mantiene en el mismo documento únicamente si modificas el hash. - No tienes que cambiar la URL si no quieres. En contraste, usar
window.location = "#foo";
sólo crea un nuevo registro en el historial si el hash actual no es#foo
. - Puedes asociar datos arbitrarios a tu nuevo registro en el historial. Con el truco del hash, necesitas codificar todos los datos relevantes en una corta cadena de texto.
Cabe destacar que pushState()
nunca hace que el evento hashchange
sea accionado, incluso si la nueva URL difiere de la URL antigua sólo en su hash.
En otros documentos, crea u nelemento con una URI null
.
Ejemplos
Esto crea un nuevo registro en el historial del navegador, estableciendo state
, title
, y url
.
JavaScript
const state = { page_id: 1, user_id: 5 };
const title = "";
const url = "hello-world.html";
history.pushState(state, title, url);
Especificaciones
Specification |
---|
HTML Standard # dom-history-pushstate-dev |
Compatibilidad con navegadores
BCD tables only load in the browser