Actualizar la barra de direcciones con una nueva URL sin hash o recargar la página [duplicado]
O soñé con Chrome (canal de desarrollo) implementando una forma de actualizar la barra de direcciones a través de JavaScript (la ruta, no el dominio) sin recargar la página o realmente lo hicieron.
Sin embargo, no puedo encontrar el artículo que creo haber leído.
¿Estoy loco o hay alguna manera de hacer esto (en Chrome)?
PD: No estoy hablando de window.location.hash y otros. Si lo anterior existe, la respuesta a esta pregunta será falsa.
¡Ahora puedes hacer esto en la mayoría de los navegadores "modernos"!
Aquí está el artículo original que leí (publicado el 10 de julio de 2010): HTML5: cambiar la URL del navegador sin actualizar la página .
Para obtener una visión más profunda de pushState/replaceState/popstate (también conocida como HTML5 History API), consulte los documentos de MDN .
TL; DR, puedes hacer esto:
window.history.pushState("object or string", "Title", "/new-url");
Consulte mi respuesta para Modificar la URL sin recargar la página para obtener instrucciones básicas.
Cambiar solo lo que hay después del hash: navegadores antiguos
document.location.hash = 'lookAtMeNow';
Cambiando la URL completa. Chrome, Firefox, IE10+
history.pushState('data to be passed', 'Title of the page', '/test');
Lo anterior agregará una nueva entrada al historial para que pueda presionar el botón Atrás para ir al estado anterior. Para cambiar la URL existente sin agregar una nueva entrada al uso del historial
history.replaceState('data to be passed', 'Title of the page', '/test');
¡Intenta ejecutarlos en la consola ahora!
Actualice la respuesta de David para detectar incluso navegadores que no admiten pushstate :
if (history.pushState) {
window.history.pushState(stateObj, "title", "url");
} else {
window.history.replaceState(stateObj, "title**", 'url');
// ** It seems that current browsers other than Safari don't support pushState
// title attribute. We can achieve the same thing by setting it in JS.
document.title = "Title";
}
estadoObj
El objeto de estado es un objeto JavaScript que está asociado con la entrada del historial pasada al método replaceState. El objeto de estado puede ser nulo.
título
Actualmente la mayoría de navegadores ignoran este parámetro, aunque es posible que lo utilicen en el futuro. Pasar la cadena vacía aquí debería ser seguro contra futuros cambios en el método. Alternativamente, podría pasar un título corto para el estado.
URL opcional
La URL de la entrada del historial. La nueva URL debe ser del mismo origen que la URL actual; de lo contrario, replaceState genera una excepción.