jueves, 15 de mayo de 2014

Redirecciones en JavaScript

En JavaScript utilizamos el objeto Location, accesible desde la propiedad window.location, para obtener información y modificar la URL de la página actual.

Podemos hacer una redirección de varias maneras:

//la forma más habitual y recomendada
window.location.href = "http://google.com";

//Equivalente a la anterior. Es simplemente un atajo sintáctico
window.location = "http://google.com";

//Equivalente a las anteriores pero con formato 'método'
window.location.assign("http://google.com");

//Equivalente a una redirección HTTP. El botón 'back' no volverá a la pg actual
window.location.replace("http://google.com");
  

Lo más sencillo y corto sería utilizar el atajo sintáctico:

window.location = "http://google.com";

Aunque lo que se recomienda generalmente, por expresar mejor lo que hace, es:

window.location.href = "http://google.com";

La diferencia de location.replace("url") con las demás es que que sustituye la URL actual en el historial del navegador. Esto implica que al pulsar el botón back o hacer window.history.back() no volvemos a la página original, que ya no existe en el historial, sino a la anterior.

En resumen, podríamos decir que para simular un click en un link (cambiamos debido a una acción del usuario) utilizamos:

window.location.href = "http://google.com";

o sus equivalentes.

Para simular una redirección utilizamos:

window.location.replace( "http://google.com" );

Esta última es la que debemos usar cuando la página redirecciona automáticamente, para evitar el problema del bucle al pulsar back desde la página final, que nos lleva a la página anterior que nos vuelve a redireccionar a la final, y asi ad infinitum.

¿cual es la diferencia entre document.location y window.location?

En los navegadores actuales no hay diferencia, document.location se mapea a window.location y se cumple:

    document.location === window.location //true

NOTA: document.location era originalmente una propiedad de 'solo lectura' que devolvía la URL actual como un string en vez de un objeto Location.

¿Se ejecuta el javaScript en lineas posteriores a la redirección?

Aunque parezca poco intuitivo, si tenemos alguna línea de código despues de la asignación de window.location, sí se ejecutará. Por ejemplo, en el siguiente código:

    window.location.href = "http://google.com";
    window.location.href = "http://yahoo.com";
    alert( "test" );

La página final será yahoo.com, no google.com, y el alert aparecerá antes de redireccionarnos.

El script en curso continuará ejecutándose hasta el final, cuando devolverá el control al navegador para iniciar la carga de la nueva página. El navegador disparará entonces los eventos 'beforeunload' y 'unload'. En este momento la página original ya queda inactiva. El comportamiento puede ser inconsistente entre navegadores.

Fuentes:
StackOverflow
MDN - window.location


1 comentario:

  1. Look at the way my buddy Wesley Virgin's autobiography launches with this shocking and controversial video.

    You see, Wesley was in the military-and shortly after leaving-he found hidden, "self mind control" secrets that the CIA and others used to get whatever they want.

    THESE are the EXACT same tactics tons of famous people (notably those who "come out of nowhere") and elite business people used to become rich and successful.

    You probably know that you only use 10% of your brain.

    Mostly, that's because most of your brain's power is UNCONSCIOUS.

    Perhaps that expression has even taken place INSIDE OF YOUR own brain... as it did in my good friend Wesley Virgin's brain about seven years ago, while riding an unregistered, beat-up garbage bucket of a car with a suspended driver's license and with $3.20 on his bank card.

    "I'm very fed up with going through life payroll to payroll! Why can't I become successful?"

    You've taken part in those questions, am I right?

    Your very own success story is waiting to happen. You just need to take a leap of faith in YOURSELF.

    Learn How To Become A MILLIONAIRE Fast

    ResponderEliminar