morgan cheng
¿Cuál es la diferencia entre ventana.ubicación y documento.ubicación? ¿Deberían ambos hacer referencia al mismo objeto?
Raúl
Según el W3C, son lo mismo. En realidad, para la seguridad de los navegadores cruzados, debe usar window.location
más bien que document.location
.
-
Votado negativo. Respuesta contradictoria. Dice audazmente que son iguales, luego describe las diferencias en un texto más claro. Decididamente no son lo mismo.
– danorton
7 de febrero de 2012 a las 1:47
-
Vamos, votantes a favor del gatillo, relájense un poco. En su mayor parte, se comportan de manera similar CONSIDERANDO LA ADVERTENCIA ESPECIFICADA por rahul. No lo culpemos en la semántica. Un poco de filadelfia, caballeros. Yo, por mi parte, encontré su respuesta completamente satisfactoria. +1 (Christoph’s debería ser la respuesta aceptada, pero rahul’s es aceptable, al menos, no merece un voto negativo).
– csifo
20 de noviembre de 2012 a las 18:03
-
-1 por recomendar una mejor práctica (siempre usando
window.location
) sin proporcionar ninguna justificación para ello. Si no proporciona la justificación, ¿por qué alguien debería seguir su consejo? La respuesta de Christoph es mucho más útil en este sentido.–Mark Amery
06/08/2014 a las 23:20
-
+1 pero también vea las respuestas de Phil Hamer y Christoph a continuación, agregan información de fondo esencial y advertencias para comprender completamente el problema.
– Jon z
31/10/2014 a las 19:12
Cristóbal
La forma canónica de obtener el objeto de ubicación actual es window.location
(ver esta página de MSDN de 1996 y el borrador del W3C de 2006).
Compara esto con document.location
que originalmente solo devolvía la URL actual como una cadena (ver esta página en MSDN). Probablemente para evitar confusiones, document.location
fue reemplazado con document.URL
(ver aquí en MSDN), que también forma parte de DOM nivel 1.
Que yo sepa, todos los navegadores modernos mapean document.location
a window.location
pero sigo prefiriendo window.location
ya que eso es lo que he usado desde que escribí mi primer DHTML.
-
si utiliza
window.location
¿no es igualmente válido simplemente usarlocation
?– commonpike
1 de marzo de 2016 a las 9:46
-
@commonpike Es — en el contexto de un guión en [at least] un documento HTML, el objeto global donde todas las variables definidas se convierten en propiedades, es el
window
objeto. Por lo tanto, cualquier variable o función que defina en el nivel superior de su secuencia de comandos es una propiedad del objeto al que hace referenciawindow
, que resulta ser el objeto global. El objeto global está implícito cuando está ausente comowindow.
— de este modolocation
se interpreta comowindow.location
. Advertencias — feif(an_undefined_variable)
arrojará un error si la variable no se definió —if(window.an_undefined_variable)
no.– Armén Michaeli
28 de junio de 2016 a las 18:43
ventana.ubicación es de lectura/escritura en todos los navegadores compatibles.
documento.ubicación es de solo lectura en Internet Explorer (al menos), pero de lectura/escritura en navegadores basados en Gecko (Firefox, SeaMonkey).
-
No puedo reproducir la afirmación de que
document.location
es de sólo lectura en IE. Puedo asignarlo con éxito en IE 10, 9, 8 y 6 (usando máquinas virtuales de moderno.es).–Mark Amery
06/08/2014 a las 23:10
diEcho
document.location
originalmente era una propiedad de sólo lectura, aunque Navegadores Gecko le permite asignarle también. Para seguridad entre navegadores, use window.location
en cambio.
Lee mas:
philhamer
Curiosamente, si tiene un marco, una imagen o un formulario llamado ‘ubicación’, entonces ‘document.ubicación’ proporciona una referencia a la ventana del marco, la imagen o el formulario, respectivamente, en lugar del objeto Ubicación. Aparentemente, esto se debe a que la búsqueda del nombre de la colección document.forms, document.images y window.frames tiene prioridad sobre la asignación a window.location.
<img name="location" src="https://stackoverflow.com/questions/2430936/location.png">
if (document.location.tagName == 'IMG') alert('Hello!')
-
No hay prioridad, simplemente se sobrescribe
– Pacerier
25 de mayo de 2013 a las 6:07
-
No, no se sobrescribe. Está sombreado, por lo que Phil tiene razón acerca de que el elemento tiene prioridad durante la resolución de propiedades.
– Kangax
22 de septiembre de 2013 a las 18:06
-
@kangax, parece que tienes razón: jsfiddle.net/uL4ysszr . Pero, ¿qué tan confiable es este comportamiento? ¿Es lo suficientemente multi-navegador?
– Pacerier
11/10/2014 a las 16:41
-
Acabo de probar esto (octubre de 2016). Parece que
window.location
ydocument.location
no se puede sombrear en Chrome o Firefox.– Sr. Llama
26/10/2016 a las 18:27
-
@Mr.Llama Tienes razón. Parece que todos los navegadores modernos ya no se comportan de la manera que describí anteriormente. Parece que se debe a darle a document.location el atributo “Infalsificable”. Cambio de cromo relevante: src.chromium.org/viewvc/blink?view=revision&revision=189862 Y error de Firefox: bugzilla.mozilla.org/show_bug.cgi?id=1133760
–Phil Hamer
14 de febrero de 2019 a las 19:14
brock adams
Hasta donde yo sé, ambos son iguales. Para la seguridad del navegador cruzado, puede usar window.location
más bien que document.location
.
Mapa de todos los navegadores modernos document.location
a window.location
pero sigo prefiriendo window.location
ya que eso es lo que he usado desde que escribí mi primera página web. es más consistente.
también puedes ver document.location === window.location
devoluciones true
lo que aclara que ambos son iguales.
-
No hay prioridad, simplemente se sobrescribe
– Pacerier
25 de mayo de 2013 a las 6:07
-
No, no se sobrescribe. Está sombreado, por lo que Phil tiene razón acerca de que el elemento tiene prioridad durante la resolución de propiedades.
– Kangax
22 de septiembre de 2013 a las 18:06
-
@kangax, parece que tienes razón: jsfiddle.net/uL4ysszr . Pero, ¿qué tan confiable es este comportamiento? ¿Es lo suficientemente multi-navegador?
– Pacerier
11/10/2014 a las 16:41
-
Acabo de probar esto (octubre de 2016). Parece que
window.location
ydocument.location
no se puede sombrear en Chrome o Firefox.– Sr. Llama
26/10/2016 a las 18:27
-
@Mr.Llama Tienes razón. Parece que todos los navegadores modernos ya no se comportan de la manera que describí anteriormente. Parece que se debe a darle a document.location el atributo “Infalsificable”. Cambio de cromo relevante: src.chromium.org/viewvc/blink?view=revision&revision=189862 Y error de Firefox: bugzilla.mozilla.org/show_bug.cgi?id=1133760
–Phil Hamer
14 de febrero de 2019 a las 19:14
document.location === window.location
devoluciones true
además
document.location.constructor === window.location.constructor
es true
Nota: Recién probado en Firefox 3.6, Opera 10 e IE6
-
@Pacerier ¿Por qué? Para objetos,
===
y==
son equivalentes.–Mark Amery
06/08/2014 a las 23:21
-
@MarkAmery, eso está mal y se puede demostrar fácilmente:
"abc" == new String("abc")
devolucionestrue
tiempo"abc" === new String("abc")
devolucionesfalse
.– Pacerier
07/08/2014 a las 18:33
-
@Pacerier De acuerdo, permítanme decirlo de forma un poco más rigurosa y menos ambigua: al comparar dos objetos entre sí (en lugar de solo un objeto con cualquier cosa),
==
y===
son equivalentes. Ver la especificación secciones 11.9.3 y 11.9.6. Para valores no nulos, no indefinidos, no numéricos, no booleanos, no de cadena con el mismo tipo,==
el comportamiento se rige por 11.9.3 parte 1f, y===
comportamiento por 11.9.6 parte 7, que se lee de manera idéntica Devolvertrue
si x e y se refieren al mismo objeto. De lo contrario, regresafalse
.–Mark Amery
07/08/2014 a las 18:58
-
@MarkAmery, no hay garantía de que ambos
document.location
ywindow.location
están apuntando a los objetos. Te estás perdiendo todo el punto de triple igual; usando 2 iguales no prueba que son el mismo obj. Deberíamos usar 3 iguales y no 2 iguales porque 2 iguales nos dará un falso positivo. En un navegador en el que documento.ubicación es una cadena de URL igual awindow.location.toString()
Despuésdocument.location==window.location
volverá verdadero mientrasdocument.location===window.location
devolverá falso.– Pacerier
11/10/2014 a las 17:16
-
@Pacerier Aha – Lo entiendo por fin. Tienes toda la razón, al menos en cuanto a
document.location === window.location
va la comparación. El hecho de que el.constructor
la comparación también significa, creo, que esta respuesta sigue siendo sólida, pero usando===
simplificaría el razonamiento.–Mark Amery
11/10/2014 a las 17:32
Para ver un caso de uso que muestre su diferencia, consulte stackoverflow.com/a/12098898/632951
– Pacerier
11/10/2014 a las 17:01