Saltar al contenido

¿Cómo eliminar el hash de window.location (URL) con JavaScript sin actualizar la página?

Basta ya de buscar por todo internet ya que estás al sitio correcto, tenemos la respuesta que deseas sin complicaciones.

Solución:

Resolver este problema está mucho más al alcance hoy en día. La API de historial de HTML5 nos permite manipular la barra de ubicación para mostrar cualquier URL dentro del dominio actual.

function removeHash ()  
    history.pushState("", document.title, window.location.pathname
                                                       + window.location.search);

Demostración de trabajo: http://jsfiddle.net/AndyE/ycmPt/show/

Esto funciona en Chrome 9, Firefox 4, Safari 5, Opera 11.50 y en IE 10. Para los navegadores no compatibles, siempre puede escribir un script degradante elegante que haga uso de él cuando esté disponible:

function removeHash ()  
    var scrollV, scrollH, loc = window.location;
    if ("pushState" in history)
        history.pushState("", document.title, loc.pathname + loc.search);
    else 
        // Prevent scrolling by storing the page's current scroll offset
        scrollV = document.body.scrollTop;
        scrollH = document.body.scrollLeft;

        loc.hash = "";

        // Restore the scroll offset, should be flicker free
        document.body.scrollTop = scrollV;
        document.body.scrollLeft = scrollH;
    

Así que puedes deshacerte del símbolo hash, pero no en todos los navegadores, todavía.

Nota: si desea reemplazar la página actual en el historial del navegador, use replaceState() en vez de pushState().

Pregunta inicial:

window.location.href.substr(0, window.location.href.indexOf('#'))

o

window.location.href.split('#')[0]

ambos devolverán la URL sin el hash ni nada después.

Con respecto a tu edición:

Cualquier cambio a window.location activará una actualización de la página. Tu puedes cambiar window.location.hash sin activar la actualización (aunque la ventana saltará si su hash coincide con una identificación en la página), pero no puede deshacerse del signo hash. Tú eliges cuál es peor…

RESPUESTA MÁS ACTUALIZADA

La respuesta correcta sobre cómo hacerlo sin sacrificar (ya sea una recarga completa o dejar el signo de hash allí) está aquí abajo. Sin embargo, dejo esta respuesta aquí con respecto a ser la original en 2009, mientras que la correcta que aprovecha las nuevas API del navegador se proporcionó 1,5 años después.

(Demasiadas respuestas son redundantes y desactualizadas). La mejor solución ahora es esta:

history.replaceState(null, null, ' ');

Te mostramos reseñas y puntuaciones

Tienes la opción de reafirmar nuestro cometido fijando un comentario o valorándolo te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *