Pregunta ¿Qué hace document.domain = document.domain?


El componente JS del lado del cliente de Orbitado (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 el documentación.)

¿Qué hace esto? ¡Parece un NOOP! (Lo he comprobado y de hecho es necesario).


74
2017-09-26 13:44


origen


Respuestas:


De hecho, escribí este código.

Al tratar de hacer cross-subdominio / puerto cometa, el iframe necesita tener el mismo document.domain valor como el marco principal. Desafortunadamente, el navegador almacena el nombre de dominio Y el puerto internamente para el original document.domain valor. 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 puede, ya que cambiar la porción de nombre de host necesariamente hará que el puerto se configure en null, así que lo mejor que puedes 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 eso. Cambia la representación interna en el navegador de ('example.com', 80) a ('example.com', null) y luego todo coincide y la comunicación entre marcos / subdominios funciona.


178
2017-10-06 12:30



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 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.


30
2017-10-20 13:33



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 cual   el documento se originó Esto predeterminado   al nombre de dominio del servidor que   el documento fue retirado de, pero   se puede cambiar a un sufijo (y solo un   sufijo) de este nombre. Esto permite   intercambio de propiedades de script, seguridad   permitiendo, entre documentos entregados   de diferentes servidores siempre que   comparte 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ás implementar a otros subdominios como el estado de documentos en órbita.


9
2017-09-26 14:02



los document.domain obtiene un valor predeterminado de la URL real si no se establece explícitamente. Los navegadores registrarán si document.domain ha llegado como valor 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


6
2018-04-24 17:27