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.