De hecho, escribí este código.
Al intentar hacer un cometa de subdominio / puerto cruzado, el iframe debe tener el mismo document.domain
valor que el marco principal. Desafortunadamente, el navegador almacena el nombre de dominio Y el puerto internamente para el document.domain
valor original . Pero el getter y setter en javascript no sabe 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 consigue que el marco inferior ('example.com', 80)
también sea?
No puede, ya que cambiar la parte del nombre de host necesariamente hará que el puerto se establezca en 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 la configuración document.domain=document.domain
hace precisamente 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 entre puertos / subdominios.
Los navegadores distinguen entre (a) document.domain cuando no se establece explícitamente 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 AMBOS la página principal Y el script externo establecen explícitamente document.domain en el mismo valor, la restricción de la política del mismo origen puede ser omitida y cada script puede acceder a todos los objetos y propiedades (de otra manera restringidos) de los contextos de los demás.
fuente
Encontré la siguiente información en este sitio: devguru . Más concretamente, aquí está la cita:
Me parece que permite el scripting entre sitios para el mismo dominio (incluso si el subdominio es diferente).
Supongo que si no toca 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.
fuente
document.domain = document.domain
es un NOOP.La
document.domain
tira de un defecto de la URL real si no se establece de manera explícita. Los navegadores registrarán sidocument.domain
procede de forma predeterminada de la URL o si se estableció explícitamente. Ambos deben ser predeterminados para el mismo dominio o ambos deben configurarse explícitamente en el mismo dominio para que esto funcione. Si uno es el predeterminado y el otro está configurado explícitamente, ambos coinciden si se leen, las dos páginas aún tendrán prohibido comunicarse entre sí.Ver: https://developer.mozilla.org/en-US/docs/DOM/document.domain
fuente