w3schools recargar example event change cambiar javascript jquery browser-history fragment-identifier browser-state

javascript - recargar - ¿Puedes usar la navegación hash sin afectar el historial?



window.history clear (5)

Me temo que podría ser impossible pero ¿hay alguna forma de cambiar el valor hash de una URL sin dejar una entrada en el historial del navegador y sin volver a cargar ? ¿O haces el equivalente?

En cuanto a los detalles, estaba desarrollando una navegación hash básica a lo largo de las líneas de:

//hash nav -- works with js-tabs var getHash = window.location.hash; var hashPref = "tab-"; function useHash(newHash) { //set js-tab according to hash newHash = newHash.replace(''#''+hashPref, ''''); $("#tabs li a[href=''"+ newHash +"'']").click(); } function setHash(newHash) { //set hash according to js-tab window.location.hash = hashPref + newHash; //THIS IS WHERE I would like to REPLACE the location.hash //without a history entry } // ... a lot of irrelavent tabs js and then.... //make tabs work $("#tabs.js-tabs a").live("click", function() { var showMe = $(this).attr("href"); $(showMe).show(); setHash(showMe); return false; }); //hash nav on ready .. if hash exists, execute if ( getHash ){ useHash(getHash); }

Usando jQuery, obviamente. La idea es que en esta instancia específica 1) hacer que el usuario revise cada cambio de pestaña efectivamente podría ''romper el botón atrás'' acumulando referencias innecesarias, y 2) no retener en qué pestaña se encuentran actualmente si presionan actualizar es una molestia


Siempre puede crear un detector de eventos para capturar los eventos de clic en el hipervínculo y en la función de devolución de llamada poner e.preventDefault (), que debería evitar que el navegador lo inserte en el historial.


location.replace("#hash_value_here"); funcionó bien para mí hasta que descubrí que no funciona en IOS Chrome. En ese caso, use:

history.replaceState(undefined, undefined, "#hash_value")

history.replaceState() funciona exactamente como history.pushState () excepto que replaceState () modifica la entrada del historial actual en lugar de crear una nueva.

Recuerde mantener el # o la última parte de la url será alterada.


Editar: Han pasado un par de años y los navegadores han evolucionado.

La answer @ Luxiyalu es el camino a seguir

- Vieja respuesta -

Yo también creo que es imposible (en este momento). Pero ¿por qué necesitas cambiar el valor hash si no vas a usarlo?

Creo que la razón principal por la que usamos el valor hash como programadores es dejar que el usuario marque nuestras páginas o guardar un estado en el historial del navegador. Si no quiere hacer nada de esto, simplemente guarde el estado en una variable y trabaje desde allí.

Creo que la razón para usar un hash es trabajar con un valor que está fuera de nuestro control. Si no lo necesita, entonces probablemente significa que tiene todo bajo control, así que simplemente almacene el estado en una variable y trabaje con él. (Me gusta repetirme)

Espero que esto te ayude. Tal vez haya una solución más fácil para su problema.

ACTUALIZACIÓN: ¿Qué tal esto?

  1. Configura un primer hash y asegúrate de que se guarde en el historial del navegador.
  2. Cuando se selecciona una nueva pestaña, haga window.history.back(1) , que hará que el historial retroceda desde su primer hash de init.
  3. Ahora configura el nuevo hash, por lo tanto, la tabulación solo hará una entrada en el historial.

Probablemente tendrá que usar algunos indicadores para saber si la entrada actual se puede "eliminar" volviendo, o si se salta el primer paso. Y para asegurarse de que su método de carga para el "hash" no se ejecuta, cuando fuerza el history.back .


history.replaceState(undefined, undefined, "#profileInfo")

Donde #profileInfo es su ID.


location.replace("#hash_value_here");

Lo anterior parece hacer lo que estás buscando.