Diferencia entre window.location.href y top.location.href

92

¿Alguien puede decirme la diferencia entre window.location.hrefy top.location.href?

Y también dónde usar cuál.

¿Y cuál será mejor al redirigir después de una llamada ajax en mvc?

Igualitario
fuente
Olvidé mencionar que tuve que redirigir a una nueva URL en .net MVC ... cuando usé top.location.href funcionó mientras que window.location no lo hizo ... ¿puedes también decir la razón por la que ????
Igualitario

Respuestas:

125

window.location.href devuelve la ubicación de la página actual.

top.location.href(que es un alias de window.top.location.href) devuelve la ubicación de la ventana más alta en la jerarquía de ventanas. Si una ventana no tiene padre, topes una referencia a sí misma (en otras palabras, window=== window.top).

topes útil tanto cuando se trata de marcos como cuando se trata de ventanas que han sido abiertas por otras páginas. Por ejemplo, si tiene una página llamada test.htmlcon el siguiente script:

var newWin=window.open('about:blank','test','width=100,height=100');
newWin.document.write('<script>alert(top.location.href);</script>');

La alerta resultante tendrá la ruta completa a test.html, no a: en blanco, que es lo window.location.hrefque devolvería.

Para responder a su pregunta sobre la redirección, vaya con window.location.assign(url);

josh3736
fuente
3
¿Es correcto llamar a top.location.hrefun alias de window.top.location.href? Pensé que la llamada variable "global" es en realidad una abreviatura de una propiedad de windowmientras que alias implica que es una variable independiente que apunta al mismo lugar.
solo.otro.programador
25

topel objeto tiene más sentido dentro de los marcos. Dentro de un marco, se windowrefiere a la ventana del marco actual, mientras que se toprefiere a la ventana más externa que contiene los marcos. Entonces:

window.location.href = 'somepage.html';significa cargar somepage.htmldentro del marco.

top.location.href = 'somepage.html';significa cargar somepage.htmlen la ventana principal del navegador.

Otros dos objetos interesantes son selfy parent.

Salman A
fuente
9

topse refiere al objeto de ventana que contiene todos los marcos actuales (padre del resto de las ventanas). windowes la corriente window.

http://www.howtocreate.co.uk/tutorials/javascript/browserinspecific

por lo que top.location.hrefpuede contener el enlace de la página "maestra" que contiene todos los marcos, mientras que window.location.hrefsolo contiene el enlace de la página "actual".

meder omuraliev
fuente
7

El primero agrega un elemento a su historial en el que puede (o debería poder) hacer clic en "Atrás" y volver a la página actual.

El segundo reemplaza el elemento del historial actual para que no pueda volver a él.

Ver window.location:

  • assign(url): Cargue el documento en la URL proporcionada.

  • replace(url): Reemplace el documento actual con el de la URL proporcionada. La diferencia con el assign()método es que después de usar replace()la página actual no se guardará en el historial de la sesión, lo que significa que el usuario no podrá usar el botón Atrás para navegar hasta ella.

window.location.href = url;

se favorece sobre:

window.location = url;
Sachin R
fuente
Para el problema de CORS, no funciona ... ¿cómo resolver esto?
Pra_A