> Manuales > Desarrollo en Javascript del lado del cliente

Explicación del objeto location disponible en el BOM para obtener mediante Javascript información de la URL actual y realizar cambios en la URL que está siendo visualizada en la ventana del navegador.

Objeto location de Javascript

El objeto location es uno de los objetos disponibles en el navegador que permite controlarlo programáticamente mediante JavaScript. Entre todos los objetos que existen en el navegador se pueden controlar diversos elementos, siendo el principal el objeto window.

Del objeto window dependen a su vez muchos objetos, como el document, el objeto navigator o el objeto location, entre otros. De entre todos estos objetos, location se utiliza para acceder y manipular la URL que se está visitando. En este artículo vamos a explicar cómo se trabaja con el objeto location y conocer sus métodos y propiedades.

En el artículo Objeto location de Javascript encuentras los siguientes apartados de interés.

Que es el objeto location

El objeto location es uno de los más importantes en el navegador. Forma parte del BOM (Browser Object Model) y sirve para controlar la dirección de la página que se está visualizando en un momento dado en la ventana y hacer cosas como cambiar la URL (Uniform Resource Locator) o refrescar la página.

Por tanto, location nos puede dar mucha información sobre la dirección de la página web actual en la que se encuentra la ventana del navegador, así como operar con esa dirección, estableciendo redirecciones o sobreescribiendo la URL que aparece en la barra de direcciones, moviéndose por el historial, etc.

Disponible mediante document.location y window.location

El objeto location es un poco especial porque permite accederse desde distintos lugares, algo que no es normal en el BOM.

Podemos acceder a él desde el objeto window.

window.location

Dado que todos los objetos del BOM comienzan en el objeto window es posible ahorrarse nombrarlo y funcionará igualmente. Esto pasa con todos los elementos dependientes del objeto window.

location

Pero además este objeto podemos encontrarlo también dentro del objeto document. Por tanto este código de acceso sería válido.

window.document.location

Y podemos igualmente ahorrarnos mencionar a window, por lo que esta alternativa también es correcta.

document.location

Propiedades del objeto location

Por medio de las propiedades del objeto location el navegador proporciona información sobre la ubicación actual de la página web que estamos visitando en un momento dado.

Gracias a location se puedes acceder a la URL y otros segmentos de ella. Por ejemplo podríamos obtener solamente el protocolo (http, https), el nombre de host (www.ejemplo.com) o el pathname (/ruta/pagina.html). También podríamos acceder a las variables enviadas por la URL (parámetros de la consulta ?clave=valor) y la parte de la URL que se encuentra después de la almohadilla o numeral (lo que se llama hash #segmento).

Además existen propiedades que nos darán elementos como el puerto, el host más el puerto, etc. Aquí tenemos una lista completa de las propiedades que disponemos en el objeto location para obtener las partes de la URL:

location.href // Obtiene la URL completa
location.protocol // Obtiene el protocolo
location.host // Obtiene el nombre de host incluyendo el puerto
location.hostname // Obtiene el nombre de host sin incluir el puerto
location.port // Obtiene la URL sin el path y otros segmentos posteriores
location.origin // Obtiene la URL sin el path y otros segmentos posteriores
location.pathname // Obtiene la ruta
location.search // Obtiene el querystring
location.hash // Obtiene la parte de la almohadilla (hash)

Si queremos ver en consola todos estos valores disponibles en location, podríamos escribir un código como este:

<script>
    console.log('href:', location.href); // Obtiene la URL completa
    console.log('protocol:', location.protocol); // Obtiene el protocolo
    console.log('host:', location.host); // Obtiene el nombre de host incluyendo el puerto
    console.log('hostname:', location.hostname); // Obtiene el nombre de host sin incluir el puerto
    console.log('port:', location.port); // Obtiene la URL sin el path y otros segmentos posteriores
    console.log('origin:', location.origin); // Obtiene la URL sin el path y otros segmentos posteriores
    console.log('pathname:', location.pathname); // Obtiene la ruta
    console.log('search:', location.search); // Obtiene el querystring
    console.log('hash:', location.hash); // Obtiene la parte de la almohadilla (hash)
</script>

Al mostrar todos los valores en la consola obtendremos una salida como la que podemos ver en la siguiente imagen:

Objeto location de Javascript

Podemos apreciar que, para una URL como esta:

http://127.0.0.1:5500/otra/url?variable=valor#hash_de_pagina

Los valores que nos aparecerían en la consola para las propiedades de location son los siguientes:

Modificar las propiedades de location o el objeto en sí

Si modificamos programáticamente el objeto location, asignando una cadena con una URL nueva, conseguiremos que el navegador navegue a esa nueva URL.

window.location = 'https://www.desarrolloweb.com';

Esto provocaría que el navegador se dirigiera a la home de desarrolloweb.com.

Recuerda que si no nombras al objeto window funcionaría igual.

También podemos modificar la propiedad href del objeto location para conseguir exactamente el mismo efecto. Este código funcionaría igualmente:

location.href = 'https://www.desarrolloweb.com';

Métodos del objeto location

Pero además de proporcionar información sobre la URL actual, existen varios métodos útiles mediante su manipulación podemos realizar acciones relacionadas con la navegación en esta u otras páginas web.

Ahora vamos a ver algunos de los usos más comunes del objeto location:

Redireccionar a otra página

Hemos visto que podemos cambiar el valor del atributo href o el objeto location en sí para movernos a otra URL. Pero además se puede conseguir realizar una redirección del navegador a otra ruta distinta con el método assign().

Con este código podemos enviar al usuario a otra página web.

// Redirige al navegador a una nueva página web
location.assign('https://escuela.it');

Recargar la página actual

Hay veces que lo que necesitamos es simplemente recargar la página, es decir, volver a solicitar al servidor el contenido de la misma página en la que estamos. Podemos conseguirlo utilizando un código como este:

// Refresca la página actual
location.reload();

Navegar a otra página sin activar el historial

Hay otro método llamado replace() que hace algo similar a assign() (hacer que el navegador muestre otra URL en la ventana) pero con la particularidad que no usa el historial para guardar el reemplazo de esa URL por la anterior.

// Reemplaza la URL sin que la anterior URL se quede en el historial
location.replace('https://escuela.it');

En este caso lo que ocurriría es que, una vez ejecutado el location.replace() el usuario no tendría la posibilidad de pulsar el botón de "atrás" para volver a la página anterior.

Ejemplo de página web que hace uso de location

Ahora te dejamos el código de la página web que hemos construido para realizar los ejemplos del objeto `` que se han explicado en este artículo.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>location</title>
</head>
<body>
  <h1>Trabajar con el objeto location</h1>
  <p>Métodos directos de window.location</p>
  <p>
    <button id="mostrar">Mostrar valores de location</button>
    <button id="redirigir">Redirección normal</button>
    <button id="reemplazar">Redirección sin historial</button>
  </p>
  <p>El botón siguiente activa un método de historial para cambiar la URL sin refrescar. No pertenece a window.location pero te permitirá ver otros valores del objeto location cuando examines sus propiedades.</p>
  <p>
    <button id="cambiar">Cambiar URL</button>
  </p>

  <script>
    document.getElementById('mostrar').addEventListener('click', function () {
      console.log('href:', location.href); // Obtiene la URL completa
      console.log('protocol:', location.protocol); // Obtiene el protocolo
      console.log('host:', location.host); // Obtiene el nombre de host incluyendo el puerto
      console.log('hostname:', location.hostname); // Obtiene el nombre de host sin incluir el puerto
      console.log('port:', location.port); // Obtiene la URL sin el path y otros segmentos posteriores
      console.log('origin:', location.origin); // Obtiene la URL sin el path y otros segmentos posteriores
      console.log('pathname:', location.pathname); // Obtiene la ruta
      console.log('search:', location.search); // Obtiene el querystring
      console.log('hash:', location.hash); // Obtiene la parte de la almohadilla (hash)
    });

    document.getElementById('redirigir').addEventListener('click', function () {
      location.assign('https://escuela.it');
    });

    document.getElementById('reemplazar').addEventListener('click', function () {
      location.replace('https://escuela.it');
    });

    document.getElementById('cambiar').addEventListener('click', function () {
      window.history.pushState({}, 'Otro título para la página', '/otra/url?variable=valor#hash_de_pagina');
    });
  </script>
</body>
</html>

Conclusión

Hemos aprendido a trabajar con el objeto location que nos ofrece Javascript en el contexto del navegador. Hemos conocido sus múltiples propiedades que nos pueden dar mucha información sobre la página que estamos visitando. También se han explicado algunos métodos útiles que pueden venirte bien para casos especiales como conseguir que la página se refresque o redirigir el navegador a otras URL.

En el siguiente artículo queremos explicar un objeto muy relacionado con location que nos permite trabajar con el historial de navegación en Javascript.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual