Back

Cómo Obtener Parámetros de URL con JavaScript

Cómo Obtener Parámetros de URL con JavaScript

Los parámetros de URL (también llamados query strings) son una parte crucial del desarrollo web, ya que permiten pasar datos entre páginas o del cliente al servidor. Ya sea que estés construyendo una función de búsqueda, manejando envíos de formularios o rastreando preferencias del usuario, saber cómo extraer y usar estos parámetros es esencial.

En este artículo, te mostraré las formas más efectivas de obtener parámetros de URL usando JavaScript, desde enfoques modernos hasta soluciones heredadas.

Puntos Clave

  • URLSearchParams es la forma moderna y recomendada de manejar parámetros de URL
  • Usa urlParams.get('param') para obtener el valor de un parámetro específico
  • Usa urlParams.has('param') para verificar si un parámetro existe
  • Para navegadores más antiguos, implementa una función de análisis personalizada
  • Siempre decodifica los valores de los parámetros para manejar caracteres especiales
  • Ten en cuenta las implicaciones de seguridad al usar parámetros de URL

Entendiendo los Parámetros de URL

Los parámetros de URL aparecen después del signo de interrogación (?) en una URL y están formateados como pares clave-valor:

https://example.com/page?name=john&id=123

En este ejemplo, hay dos parámetros: name con un valor de john e id con un valor de 123.

El Enfoque Moderno: URLSearchParams

La forma más simple y confiable de manejar parámetros de URL en navegadores modernos es usando la interfaz URLSearchParams.

Uso Básico

// Asumiendo URL: https://example.com/page?product=shirt&color=blue&size=m

// Obtener el query string
const queryString = window.location.search;

// Analizar el query string
const urlParams = new URLSearchParams(queryString);

// Obtener el valor de un parámetro específico
const product = urlParams.get('product'); // "shirt"
const color = urlParams.get('color');     // "blue"

Verificar Si un Parámetro Existe

// Verificar si un parámetro existe
if (urlParams.has('product')) {
  // El parámetro existe
  console.log('El parámetro product existe');
}

Manejar Múltiples Valores

Si un parámetro aparece múltiples veces en la URL, puedes obtener todos los valores:

// URL: https://example.com/page?tag=javascript&tag=frontend

// Obtener todos los valores para un parámetro
const tags = urlParams.getAll('tag'); // ["javascript", "frontend"]

Iterar Sobre Parámetros

URLSearchParams proporciona métodos iteradores para trabajar con todos los parámetros:

// Iterar sobre todas las claves de parámetros
for (const key of urlParams.keys()) {
  console.log(key);
}

// Iterar sobre todos los valores de parámetros
for (const value of urlParams.values()) {
  console.log(value);
}

// Iterar sobre todas las entradas de parámetros (pares clave-valor)
for (const [key, value] of urlParams.entries()) {
  console.log(`${key}: ${value}`);
}

Enfoque Heredado: Función Personalizada

Para navegadores más antiguos que no soportan URLSearchParams, puedes crear una función personalizada:

function getUrlParam(param) {
  const queryString = window.location.search.substring(1);
  const urlParams = queryString.split('&');
  
  for (let i = 0; i < urlParams.length; i++) {
    const paramPair = urlParams[i].split('=');
    if (paramPair[0] === param) {
      return decodeURIComponent(paramPair[1] || "");
    }
  }
  return null;
}

// Uso
const productValue = getUrlParam('product');

Manejo de Casos Límite Comunes

Caracteres Codificados

Los parámetros de URL a menudo contienen caracteres codificados. Por ejemplo, los espacios se codifican como %20:

// URL: https://example.com/search?query=web%20development

const query = urlParams.get('query');
console.log(query); // "web development" (decodificado automáticamente)

Cuando uses una función personalizada, asegúrate de usar decodeURIComponent() para manejar estos caracteres codificados correctamente.

Parámetros Faltantes

Siempre verifica si un parámetro existe antes de usarlo:

const size = urlParams.has('size') ? urlParams.get('size') : 'default';

Parámetros Vacíos

Los parámetros pueden existir sin valores:

// URL: https://example.com/page?newsletter=&theme=dark

const newsletter = urlParams.get('newsletter'); // "" (cadena vacía)
const hasNewsletter = urlParams.has('newsletter'); // true

Ejemplo Completo: Obtener Todos los Parámetros de URL

Aquí tienes una función integral para obtener todos los parámetros de URL como un objeto:

function getAllUrlParams() {
  const params = {};
  const queryString = window.location.search.substring(1);
  
  if (queryString) {
    const pairs = queryString.split('&');
    
    for (const pair of pairs) {
      const [key, value] = pair.split('=');
      
      // Si el parámetro no tiene valor, establecerlo como true
      if (typeof value === 'undefined') {
        params[key] = true;
      } else {
        // Si ya tenemos este parámetro, convertir a array
        if (params[key]) {
          if (!Array.isArray(params[key])) {
            params[key] = [params[key]];
          }
          params[key].push(decodeURIComponent(value));
        } else {
          params[key] = decodeURIComponent(value);
        }
      }
    }
  }
  
  return params;
}

Compatibilidad con Navegadores

URLSearchParams es compatible con todos los navegadores modernos, incluyendo:

  • Chrome 49+
  • Firefox 44+
  • Safari 10.1+
  • Edge 17+

Para navegadores más antiguos como Internet Explorer, necesitarás usar un polyfill o el enfoque de función personalizada.

Consideraciones de Rendimiento

Para la mayoría de aplicaciones, la diferencia de rendimiento entre métodos es insignificante. Sin embargo:

  1. URLSearchParams está optimizado y mantenido por los proveedores de navegadores
  2. Las funciones personalizadas pueden adaptarse a tus necesidades específicas
  3. Si solo obtienes un parámetro, una regex simple podría ser más rápida

Notas de Seguridad

Recuerda que los parámetros de URL son visibles en la barra de direcciones del navegador y no son seguros para información sensible. Siempre valida y sanitiza los valores de los parámetros antes de usarlos en tu aplicación.

Conclusión

La interfaz URLSearchParams proporciona una forma limpia y estandarizada de trabajar con parámetros de URL en JavaScript. Para la mayoría de aplicaciones web modernas, es el enfoque recomendado. Para soporte de navegadores heredados, una función personalizada puede proporcionar la misma funcionalidad con un poco más de código.

Al entender cómo extraer y usar efectivamente los parámetros de URL, puedes construir aplicaciones web más dinámicas e interactivas.

Preguntas Frecuentes

Sí, puedes usar URLSearchParams para modificar parámetros y luego actualizar la URL con history.pushState() o history.replaceState().

La mayoría de frameworks SPA (React, Vue, Angular) tienen sistemas de enrutamiento integrados que manejan parámetros de URL. Consulta la documentación de tu framework para más detalles.

Los nombres de parámetros distinguen entre mayúsculas y minúsculas según la especificación de URL, por lo que 'name' y 'Name' son parámetros diferentes.

Puedes usar el mismo nombre de parámetro múltiples veces (ej. ?color=red&color=blue) o usar notación de corchetes (ej. ?colors[]=red&colors[]=blue).

No hay un límite oficial, pero los navegadores y servidores típicamente tienen límites prácticos alrededor de 2,000-8,000 caracteres para toda la URL.

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers