De hecho, escribí este código.
Al intentar hacerlo a través del subdominio/cometa puerto, el iframe tiene que tener el mismo valor document.domain
como el marco principal. Desafortunadamente, el navegador almacena el nombre de dominio Y el puerto internamente para el valor original document.domain
. Pero getter y setter en javascript no saben nada sobre el puerto. El problema es el siguiente: 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 como ('example.com', 80)
también?
No puede, ya que cambiar la parte de 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 establecer 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 la comunicación entre marcos/puertos de subdominios funciona.
+1 para la primera oración :) –
Desafortunadamente, esta solución no funcionó para mí (ver http://stackoverflow.com/questions/7796767/is-it-possible-to-alter-one-frame-from-another- using-javascript para más detalles). Agregar 'document.domain = document.domain' a todos los marcos no cambia el comportamiento de Chrome. ¿Algunas ideas? –
Además, descubrí que si establecía un retraso para mi js, al menos obtengo URL válidas para ambos marcos. Aún así, sin embargo, un marco no puede acceder al otro. –