javascript - ¿Qué hace document.domain=document.domain?
orbited (4)
De hecho, escribí este código.
Al intentar hacer un cometido cruzado de subdominio / puerto, el iframe necesita tener el mismo valor document.domain
que el principal. Desafortunadamente, el navegador almacena el nombre de dominio Y el puerto internamente para el valor original de document.domain
. Pero getter y setter en javascript no saben nada sobre el puerto. Entonces el problema es este: si el marco superior document.domain
es (''example.com'', 80)
, y el marco inferior es (''comet.example.com'', 80)
, ¿cómo se obtiene el marco inferior para ser (''example.com'', 80)
también?
No se puede, ya que cambiar la parte de nombre de host necesariamente hará que el puerto se establezca como null
, por lo que lo mejor que puede hacer es (''example.com'', null)
en el marco inferior. Por lo tanto, el marco superior también debe establecerse en ese valor, y establecer document.domain=document.domain
hace justamente eso. Cambia la representación interna en el navegador de (''example.com'', 80)
a (''example.com'', null)
y luego todo coincide y funciona la comunicación de marco de puerto cruzado / subdominio.
El componente JS del lado del cliente de Orbited (un servidor Comet) requiere que si el servidor se está ejecutando en un dominio o puerto diferente al JS mismo, debe ejecutar
document.domain = document.domain;
antes de que se cargue cualquier otro JS. (Ver la documentation )
¿Qué hace esto? ¡Parece un NOOP! (Lo he comprobado y de hecho es necesario).
El document.domain
extrae un valor predeterminado de la URL real si no se establece explícitamente. Los navegadores registrarán si document.domain
ha sido predeterminado de la URL o si se ha establecido explícitamente. Ambos deben ser valores predeterminados para el mismo dominio o ambos deben establecerse explícitamente en el mismo dominio para que esto funcione. Si uno está predeterminado y uno está configurado explícitamente, ambos coincidentes si se leen, las dos páginas seguirán prohibidas de hablar entre ellas.
Ver: https://developer.mozilla.org/en-US/docs/DOM/document.domain
Encontré la siguiente información en este sitio: devguru . Más concretamente, aquí está la cita:
Esta propiedad establece o devuelve el nombre de dominio del servidor desde el que se originó el documento. Esto se predetermina al nombre de dominio del servidor del que se extrajo el documento, pero se puede cambiar a un sufijo (y solo un sufijo) de este nombre. Esto permite el intercambio de propiedades de script, permitiendo la seguridad, entre documentos entregados desde diferentes servidores siempre que compartan el mismo sufijo de dominio.
Me parece que permite scripts de sitios cruzados para el mismo dominio (incluso si el subdominio es diferente).
Supongo que si no tocas document.domain, el motor js solo permite otros javascripts del mismo dominio. Con esa propiedad, podrá implementar en otros subdominios como el estado de documentos en órbita.
Los navegadores distinguen entre (a) document.domain cuando no está explícitamente establecido y (b) document.domain cuando se establece explícitamente ... incluso si devuelven el mismo valor.
Establecer explícitamente el valor indica la intención de "cooperar" con un script en otro subdominio (bajo el mismo dominio principal).
Si AMBAS, la página principal Y la secuencia de comandos externa establecen explícitamente document.domain en el mismo valor, la restricción de política del mismo origen puede pasarse por alto y cada secuencia de comandos puede acceder a todos los objetos y propiedades (por lo demás restringidos) de los contextos de los demás.