¿Cómo modifico la URL sin recargar la página?

Resuelto Robin Rodricks asked hace 15 años • 21 respuestas

¿Hay alguna manera de modificar la URL de la página actual sin recargar la página?

Me gustaría acceder a la parte anterior. al hash #.

Solo necesito cambiar la parte después del dominio, por lo que no es como si estuviera violando las políticas entre dominios.

 window.location.href = "www.mysite.com/page2.php";  // this reloads
Robin Rodricks avatar May 05 '09 17:05 Robin Rodricks
Aceptado

¡Esto ahora se puede hacer en Chrome, Safari, Firefox 4+ e Internet Explorer 10pp4+!

Consulte la respuesta de esta pregunta para obtener más información: Actualizar la barra de direcciones con una nueva URL sin hash o recargar la página

Ejemplo:

 function processAjaxData(response, urlPath){
     document.getElementById("content").innerHTML = response.html;
     document.title = response.pageTitle;
     window.history.pushState({"html":response.html,"pageTitle":response.pageTitle},"", urlPath);
 }

Luego puede usar window.onpopstateo window.addEventListenerpara detectar la navegación del botón hacia atrás/adelante:

window.addEventListener("popstate", (e) => {
    if(e.state){
        document.getElementById("content").innerHTML = e.state.html;
        document.title = e.state.pageTitle;
    }
});

Para obtener una visión más profunda de la manipulación del historial del navegador, consulte este artículo de MDN .

David Murdoch avatar Jul 28 '2010 15:07 David Murdoch

HTML5 introdujo los métodos history.pushState()y history.replaceState(), que le permiten agregar y modificar entradas del historial, respectivamente.

window.history.pushState('page2', 'Title', '/page2.php');

Lea más sobre esto desde aquí.

Vivart avatar Aug 17 '2010 13:08 Vivart

También puedes usar HTML5 replaceState si quieres cambiar la URL pero no quieres agregar la entrada al historial del navegador:

if (window.history.replaceState) {
   //prevents browser from storing history with each change:
   window.history.replaceState(statedata, title, url);
}

Esto "rompería" la funcionalidad del botón Atrás. Esto puede ser necesario en algunos casos, como en una galería de imágenes (donde desea que el botón Atrás regrese a la página de índice de la galería en lugar de retroceder a través de todas y cada una de las imágenes que vio) mientras le da a cada imagen su propia URL única.

George Filippakos avatar Nov 19 '2012 10:11 George Filippakos

Aquí está mi solución (newUrl es su nueva URL que desea reemplazar con la actual):

history.pushState({}, null, newUrl);
Haimei avatar Jun 10 '2015 18:06 Haimei