What is a hashchange?

Evento hashchange en JavaScript: Navegación sin recargas

hace 4 años

Valoración: 3.99 (2499 votos)

En el mundo del desarrollo web moderno, la interactividad y la fluidez son claves para una buena experiencia de usuario. JavaScript ofrece diversas herramientas para lograr esto, y una de ellas, aunque a veces menospreciada, es el evento hashchange. Este evento, soportado por la gran mayoría de navegadores actuales, permite a los desarrolladores web detectar y reaccionar a los cambios en la parte hash (o fragmento identificador) de la URL, abriendo un abanico de posibilidades para crear aplicaciones web más dinámicas y amigables.

What is a hashchange?
The hashchange event is fired when the fragment identifier of the URL has changed (the part of the URL beginning with and following the # symbol). Jul 7, 2023
Índice de Contenido

¿Qué es exactamente el hashchange?

El evento hashchange se dispara en el objeto window cuando la parte del fragmento identificador de la URL (la parte que comienza con el símbolo #) ha cambiado. Este fragmento identificador, también conocido como "hash", históricamente se utilizaba para enlazar a una sección específica dentro de un documento HTML. Sin embargo, en las aplicaciones web modernas, su utilidad se ha extendido mucho más allá.

Imagina que tienes una URL como https://www.example.com/pagina#seccion2. La parte #seccion2 es el fragmento identificador. Si el usuario modifica este fragmento, ya sea haciendo clic en un enlace que lo cambia, escribiéndolo directamente en la barra de direcciones o mediante manipulación con JavaScript, se activará el evento hashchange. Lo interesante de este evento es que se produce sin necesidad de recargar la página completa, lo que permite crear experiencias de usuario mucho más rápidas y fluidas.

¿Cómo detectar el evento hashchange en JavaScript?

Detectar y manejar el evento hashchange en JavaScript es bastante sencillo. Se utiliza el método addEventListener en el objeto window para adjuntar un controlador de eventos a hashchange. Este controlador es una función que se ejecutará cada vez que el evento se dispare.

Aquí te mostramos un ejemplo básico de cómo hacerlo:

window.addEventListener('hashchange', function(event) { console.log('¡El hash ha cambiado!'); console.log('Nueva URL:', document.URL); console.log('Hash antiguo:', event.oldURL); console.log('Hash nuevo:', event.newURL); // Aquí puedes agregar tu lógica para manejar el cambio de hash }); 

En este código, cuando el hash de la URL cambia, la función anónima dentro de addEventListener se ejecuta. El objeto event que se pasa a la función contiene información útil, como:

  • event.oldURL: La URL completa antes del cambio del hash.
  • event.newURL: La URL completa después del cambio del hash.

Puedes acceder al nuevo hash directamente desde window.location.hash. Este devolverá una cadena de texto que comienza con el símbolo # seguido del nuevo fragmento identificador. Por ejemplo, si la URL es https://www.example.com/pagina#nueva-seccion, window.location.hash devolverá "#nueva-seccion".

Usos prácticos del evento hashchange

El evento hashchange, aunque simple, tiene diversas aplicaciones en el desarrollo web moderno. Algunas de las más comunes incluyen:

Navegación en aplicaciones web de una sola página (SPA)

En las SPA, la idea principal es evitar las recargas completas de página para cada interacción del usuario. El evento hashchange fue una de las primeras técnicas utilizadas para simular la navegación entre diferentes "páginas" o vistas dentro de una SPA. Al cambiar el hash de la URL, se puede activar JavaScript para mostrar u ocultar diferentes secciones de contenido, dando la ilusión de una navegación tradicional sin la penalización de la recarga completa.

Aunque hoy en día la API de Historial (pushState y replaceState) ofrece una solución más robusta y limpia para la navegación en SPA, el hashchange sigue siendo una opción viable, especialmente para aplicaciones más sencillas o cuando se requiere compatibilidad con navegadores muy antiguos.

Historial de navegación sin recargas

El evento hashchange permite mantener un historial de navegación dentro de una misma página. Cada vez que el hash cambia, se puede registrar este cambio y permitir al usuario navegar hacia atrás y hacia adelante utilizando los botones del navegador. Esto mejora significativamente la experiencia de usuario al permitir la navegación esperada dentro de la aplicación, incluso si se trata de una SPA o de una página con contenido dinámico.

How to check hash change in JavaScript?
To detect changes in the URL hash (i.e., the part of the URL after the # symbol) in JavaScript, you can use the hashchange event. This event fires whenever the hash fragment of the URL changes, making it ideal for detecting and handling such changes.

Anclaje dinámico a secciones de la página

Aunque el uso original del hash era para enlazar a secciones específicas, el hashchange permite extender esta funcionalidad de forma dinámica. Puedes usar JavaScript para modificar el hash en función de la interacción del usuario y, a continuación, utilizar el evento hashchange para realizar acciones como desplazar la página a una sección específica, resaltar contenido relevante o cargar información adicional relacionada con la sección actual.

Control del estado de la aplicación

El hash puede utilizarse como una forma sencilla de almacenar y compartir el estado de la aplicación en la URL. Por ejemplo, podrías codificar parámetros de búsqueda, filtros o la vista actual de la aplicación en el hash. De esta manera, el usuario puede compartir la URL con un estado específico de la aplicación, o guardar la URL en marcadores para volver a ese estado más tarde. Al detectar el evento hashchange, tu JavaScript puede leer el hash y restaurar el estado correspondiente de la aplicación.

Ventajas y desventajas del uso de hashchange

Como cualquier técnica, el uso del evento hashchange tiene sus ventajas y desventajas:

Ventajas:

  • Soporte amplio: Funciona en prácticamente todos los navegadores modernos y en versiones antiguas, lo que garantiza una buena compatibilidad.
  • Implementación sencilla: Es fácil de entender e implementar en JavaScript.
  • Navegación sin recargas: Permite crear experiencias de usuario más rápidas y fluidas al evitar recargas completas de página.
  • Historial del navegador: Integra con el historial del navegador, permitiendo la navegación hacia atrás y adelante.

Desventajas:

  • URL menos "limpias": Las URLs con hashes pueden ser consideradas menos estéticas o amigables para el SEO en comparación con URLs sin hashes.
  • Limitaciones en el SEO: Aunque Google y otros motores de búsqueda pueden rastrear contenido basado en hash, puede haber ciertas limitaciones o consideraciones en cuanto a SEO. Es importante investigar las mejores prácticas si el SEO es un factor crítico.
  • Históricamente asociado a "anclas": Aunque su uso se ha extendido, algunos usuarios aún pueden asociar el hash con el anclaje a secciones dentro de la página, lo que podría generar cierta confusión si se utiliza para otros fines.
  • Reemplazado por la API de Historial para SPAs: Para aplicaciones web de una sola página más complejas, la API de Historial (pushState y replaceState) ofrece una solución más completa y recomendada para la gestión de la navegación.

Consideraciones importantes al usar hashchange

Antes de implementar hashchange en tu proyecto, ten en cuenta las siguientes consideraciones:

  • Accesibilidad: Asegúrate de que tu uso de hashchange sea accesible para usuarios con discapacidades, incluyendo aquellos que utilizan lectores de pantalla. Considera cómo los cambios de hash se anuncian a las tecnologías de asistencia y si la experiencia es intuitiva y usable.
  • SEO: Si el SEO es importante para tu proyecto, investiga cómo afecta el uso de hashes a tu estrategia de SEO. Consulta las guías de Google y otras fuentes relevantes para optimizar tu sitio web para los motores de búsqueda.
  • Alternativas: Considera si la API de Historial (pushState y replaceState) podría ser una alternativa más adecuada, especialmente si estás desarrollando una SPA compleja. La API de Historial ofrece mayor control sobre la URL y el historial del navegador sin las limitaciones del hash.

Preguntas frecuentes sobre hashchange

¿Qué navegadores son compatibles con el evento hashchange?

El evento hashchange tiene una excelente compatibilidad con navegadores. Funciona en todos los navegadores modernos como Chrome, Firefox, Safari, Edge y Opera, así como en versiones antiguas de Internet Explorer (a partir de IE8). En general, la compatibilidad es muy amplia desde julio de 2015, cubriendo la gran mayoría de usuarios web.

¿Es seguro usar hashchange?

Sí, usar hashchange es seguro. No presenta riesgos de seguridad inherentemente mayores que otras técnicas de JavaScript. Sin embargo, como con cualquier código JavaScript, es importante seguir las mejores prácticas de seguridad, como validar y sanitizar los datos que se manejan en el controlador del evento hashchange para prevenir vulnerabilidades como XSS (Cross-Site Scripting).

¿Cuál es la diferencia entre hashchange y la API de Historial (pushState/replaceState)?

Tanto hashchange como la API de Historial permiten manipular la URL sin recargar la página. La principal diferencia es que hashchange se basa en el cambio del fragmento identificador (hash), mientras que la API de Historial permite modificar la ruta completa de la URL (pathname) y los datos de estado asociados a la entrada del historial. La API de Historial se considera una solución más limpia y potente para la navegación en SPAs, ya que permite URLs más amigables y un control más preciso del historial del navegador. Sin embargo, hashchange es más sencillo de implementar y tiene una compatibilidad con navegadores más antigua.

Conclusión

El evento hashchange es una herramienta útil y versátil en JavaScript para crear aplicaciones web dinámicas y mejorar la experiencia de usuario. Aunque ha sido en gran medida superado por la API de Historial para las SPA más complejas, sigue siendo una opción viable y sencilla para muchos casos de uso, especialmente cuando se busca compatibilidad con navegadores antiguos o para aplicaciones más simples. Comprender cómo funciona y sus ventajas y desventajas te permitirá tomar decisiones informadas sobre cuándo y cómo utilizarlo en tus proyectos web.

Subir