Command Palette

Search for a command to run...

Objeto Navigator: userAgent, language y Más

Aprende a obtener información del navegador y del usuario usando el objeto navigator, incluyendo userAgent, language, geolocalización y más.

Lectura: 13 min
Nivel: Intermedio

TL;DR - Resumen rápido

  • El objeto navigator proporciona información sobre el navegador y el entorno de ejecución
  • navigator.userAgent identifica el navegador y el sistema operativo del usuario
  • navigator.language devuelve el idioma preferido del usuario
  • navigator.languages devuelve un array con los idiomas preferidos en orden de preferencia
  • navigator.geolocation permite obtener la ubicación del usuario con permiso

Introducción al Objeto Navigator

El objeto navigator es parte del Browser Object Model (BOM) y proporciona información sobre el navegador y el entorno de ejecución. Este objeto es una interfaz que permite acceder a información como el tipo de navegador, el sistema operativo, el idioma preferido del usuario, y muchas otras propiedades útiles.

El objeto navigator es de solo lectura en la mayoría de los navegadores modernos, lo que significa que no puedes modificar sus propiedades directamente. Sin embargo, algunos navegadores permiten modificar ciertas propiedades como userAgent por razones de compatibilidad.

  • <strong>Información del navegador:</strong> Tipo, versión y motor del navegador
  • <strong>Información del sistema:</strong> Sistema operativo y plataforma
  • <strong>Preferencias del usuario:</strong> Idioma, geolocalización, cookies
  • <strong>Capacidades:</strong> Soporte para JavaScript, cookies, geolocalización
  • <strong>Privacidad:</strong> Algunas propiedades pueden ser modificadas o deshabilitadas por el usuario

Privacidad y el Objeto Navigator

Debido a preocupaciones de privacidad, muchos navegadores modernos limitan o falsifican ciertas propiedades del objeto navigator. Por ejemplo, algunos navegadores ocultan información específica del sistema operativo o del navegador para proteger la privacidad del usuario.

Propiedad userAgent

La propiedad navigator.userAgent devuelve una cadena que identifica el navegador, su versión y el sistema operativo del usuario. Esta cadena es enviada por el navegador en cada solicitud HTTP y es comúnmente usada para detectar el tipo de navegador y adaptar la experiencia del usuario.

Leer el User Agent

Puedes acceder al user agent simplemente leyendo la propiedad navigator.userAgent. Esta cadena contiene información sobre el navegador, su versión, el motor de renderizado y el sistema operativo.

leer-useragent.js
Loading code...

El user agent es una cadena compleja que contiene múltiples partes de información. Por ejemplo, puede incluir el nombre del navegador (Chrome, Firefox, Safari), la versión, el motor de renderizado (Blink, Gecko, WebKit), y el sistema operativo (Windows, macOS, Linux, Android, iOS).

Detectar el Tipo de Navegador

Aunque no se recomienda depender del user agent para detectar el navegador (es mejor usar feature detection), a veces es necesario. Puedes usar expresiones regulares o el método includes() para detectar el tipo de navegador.

detectar-navegador.js
Loading code...

Este método de detección de navegador tiene varias limitaciones. Los navegadores pueden falsificar su user agent, y las cadenas pueden cambiar con las actualizaciones. Por eso, evita usar el user agent para determinar si el navegador soporta una característica específica. En su lugar, usa feature detection: verifica si la característica existe antes de usarla. El user agent sniffing es propenso a errores y puede romper tu aplicación.

  • <strong>Browser detection:</strong> ❌ Usar userAgent para detectar el navegador
  • <strong>Feature detection:</strong> ✅ Verificar si existe la característica específica
  • <strong>Progressive enhancement:</strong> ✅ Empezar con funcionalidad básica y agregar mejoras
  • <strong>Graceful degradation:</strong> ✅ Proporcionar fallbacks cuando una característica no existe
  • <strong>Modernizr:</strong> ✅ Librería que simplifica feature detection

Propiedad language

La propiedad navigator.language devuelve el idioma preferido del usuario como una cadena en formato de código de idioma (por ejemplo, "en-US" para inglés de Estados Unidos, "es-ES" para español de España). Este valor se basa en la configuración del navegador del usuario.

Leer el Idioma del Usuario

Puedes acceder al idioma preferido del usuario simplemente leyendo la propiedad navigator.language. Este valor es útil para adaptar la interfaz de usuario al idioma preferido del usuario.

leer-language.js
Loading code...

El código de idioma sigue el formato BCP 47, que consiste en un código de idioma de dos letras (por ejemplo, "en" para inglés) seguido opcionalmente de un código de país de dos letras (por ejemplo, "US" para Estados Unidos), separados por un guion.

Adaptar la Interfaz según el Idioma

Puedes usar navigator.language para adaptar la interfaz de usuario al idioma preferido del usuario. Por ejemplo, puedes cambiar el formato de fechas, números y monedas, o cargar traducciones específicas.

adaptar-interfaz.js
Loading code...

Este patrón es común en aplicaciones que soportan múltiples idiomas. Sin embargo, es mejor permitir que el usuario cambie manualmente el idioma, ya que navigator.language puede no reflejar el idioma que realmente quiere usar. Usa navigator.language como valor predeterminado, pero siempre permite cambiar manualmente y guarda la preferencia en localStorage para persistirla entre sesiones.

Propiedad languages

La propiedad navigator.languages devuelve un array de cadenas que representan los idiomas preferidos del usuario en orden de preferencia. El primer elemento del array es el idioma más preferido, que generalmente coincide con navigator.language.

Leer los Idiomas Preferidos

Puedes acceder a todos los idiomas preferidos del usuario leyendo la propiedad navigator.languages. Este array es útil cuando quieres ofrecer múltiples opciones de idioma basadas en las preferencias del usuario.

leer-languages.js
Loading code...

El array navigator.languages contiene todos los idiomas que el usuario ha configurado en su navegador, ordenados por preferencia. Esto es útil para aplicaciones que soportan múltiples idiomas y quieren ofrecer opciones relevantes al usuario.

Seleccionar el Idioma Disponible

Cuando tu aplicación soporta múltiples idiomas, puedes usar navigator.languages para seleccionar el mejor idioma disponible. Esto implica verificar si alguno de los idiomas preferidos del usuario está disponible en tu aplicación.

seleccionar-idioma.js
Loading code...

Este patrón es común en aplicaciones que soportan múltiples idiomas. La función busca el primer idioma disponible en la lista de preferencias del usuario, lo que garantiza que el usuario vea la aplicación en un idioma que entiende.

Propiedades de Plataforma

El objeto navigator incluye varias propiedades que proporcionan información sobre la plataforma y el sistema operativo del usuario. Estas propiedades incluyen platform, vendor, y product, aunque muchas de ellas están obsoletas o han sido removidas por razones de privacidad.

Propiedad platform

La propiedad navigator.platform devuelve una cadena que identifica la plataforma del navegador, como el sistema operativo o el tipo de dispositivo. Esta propiedad es útil para detectar si el usuario está en un dispositivo móvil o de escritorio.

propiedad-platform.js
Loading code...

La propiedad platform puede devolver valores como "Win32" (Windows), "MacIntel" (macOS), "Linux x86_64" (Linux), o valores específicos como "iPhone" o "iPad". Sin embargo, esta propiedad está obsoleta y puede ser removida en el futuro. Los navegadores modernos pueden falsificar o limitar esta información por razones de privacidad. Usa feature detection o media queries en lugar de platform detection.

Detección de Móvil: CSS Media Queries

En lugar de usar userAgent o platform para detectar móviles, usa CSS media queries o la API matchMedia. Esto es más confiable y no depende de cadenas que pueden ser falsificadas: window.matchMedia('(max-width: 768px)').matches.

Detectar Dispositivo Móvil

Puedes usar navigator.userAgent o navigator.platform para detectar si el usuario está en un dispositivo móvil. Esto es útil para adaptar la interfaz de usuario o cargar recursos específicos para móviles.

detectar-movil.js
Loading code...

Este método de detección de móvil no es infalible. Los navegadores pueden falsificar su user agent, y algunos dispositivos pueden no ser detectados correctamente. Es mejor usar CSS media queries o la API de detección de características cuando sea posible.

Geolocalización

La API de geolocalización del navegador, accesible a través de navigator.geolocation, permite obtener la ubicación geográfica del usuario. Esta API requiere el permiso del usuario y solo funciona en contextos seguros (HTTPS).

Obtener la Ubicación Actual

Puedes obtener la ubicación actual del usuario usando el método navigator.geolocation.getCurrentPosition(). Este método acepta una función de éxito, una función de error, y opciones de configuración.

obtener-ubicacion.js
Loading code...

El método getCurrentPosition() devuelve las coordenadas (latitud y longitud), la precisión de la ubicación, la altitud, y otra información relevante. La función de error se llama si no se puede obtener la ubicación, por ejemplo, si el usuario deniega el permiso.

Seguir la Ubicación en Tiempo Real

Para aplicaciones que necesitan seguir la ubicación del usuario en tiempo real (por ejemplo, aplicaciones de navegación o seguimiento de actividad), puedes usar el método navigator.geolocation.watchPosition(). Este método llama a la función de éxito cada vez que la ubicación cambia.

seguir-ubicacion.js
Loading code...

El método watchPosition() devuelve un ID que puedes usar para detener el seguimiento con clearWatch(). Es importante detener el seguimiento cuando ya no lo necesitas para conservar la batería del dispositivo. Siempre solicita el permiso de geolocalización explícitamente y explica al usuario por qué necesitas su ubicación.

Permisos y HTTPS para Geolocalización

La API de geolocalización requiere HTTPS (no funciona en HTTP). Además, los navegadores modernos solicitan permiso explícito al usuario. Siempre maneja los errores de permiso denegado y proporciona alternativas (como permitir ingresar la ubicación manualmente).

Errores Comunes

Al trabajar con el objeto navigator, hay varios errores comunes que puedes encontrar. Conocer estos errores te ayudará a escribir código más robusto y evitar bugs difíciles de depurar.

User Agent Falsificado

Muchos navegadores y extensiones permiten falsificar el user agent, lo que significa que navigator.userAgent puede no reflejar el navegador real del usuario. Esto puede causar que tu detección de navegador falle.

error-useragent-falsificado.js
Loading code...

Debido a que el user agent puede ser falsificado, no debes depender exclusivamente de él para decisiones críticas. Usa feature detection para determinar si el navegador soporta una característica específica.

Permiso de Geolocalización Denegado

La API de geolocalización requiere el permiso del usuario. Si el usuario deniega el permiso, la función de error será llamada con el código de error PERMISSION_DENIED. Debes manejar este caso gracefully.

error-geolocalizacion-permiso.js
Loading code...

Siempre maneja los errores de geolocalización y proporciona una alternativa cuando el usuario deniega el permiso. Por ejemplo, puedes permitir que el usuario ingrese su ubicación manualmente o usar una ubicación predeterminada. Los códigos de error comunes son PERMISSION_DENIED (usuario denegó), POSITION_UNAVAILABLE (no se puede determinar la ubicación), y TIMEOUT (excedió el tiempo de espera).

Resumen: Objeto Navigator

Conceptos principales:

  • El objeto navigator proporciona información sobre el navegador y el entorno de ejecución
  • navigator.userAgent identifica el navegador y el sistema operativo del usuario
  • navigator.language devuelve el idioma preferido del usuario
  • navigator.languages devuelve un array con los idiomas preferidos en orden de preferencia
  • navigator.geolocation permite obtener la ubicación del usuario con permiso

Mejores prácticas:

  • Usa feature detection en lugar de browser detection cuando sea posible
  • Usa navigator.language como valor predeterminado, pero permite que el usuario cambie el idioma
  • Siempre maneja los errores de geolocalización y proporciona alternativas
  • Solicita el permiso de geolocalización explícitamente y explica por qué lo necesitas
  • Detén el seguimiento de geolocalización cuando ya no lo necesites