Actualizar la barra de direcciones con una nueva URL sin hash o recargar la página [duplicado]

Resuelto David Murdoch asked hace 14 años • 4 respuestas

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.

David Murdoch avatar Jul 27 '10 03:07 David Murdoch
Aceptado

¡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.

David Murdoch avatar Jul 27 '2010 01:07 David Murdoch

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!

Pawel avatar Sep 01 '2016 16:09 Pawel

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.

metamagikum avatar Jul 04 '2017 11:07 metamagikum