Ho effettivamente scritto questo codice.
Quando si tenta di eseguire cross-subdomain/port comet, l'iframe deve avere lo stesso valore document.domain
come frame principale. Sfortunatamente, il browser memorizza internamente il nome del dominio e la porta per il valore originale document.domain
. Ma il getter e setter in javascript non sa nulla del porto. Quindi il problema è questo: se il frame superiore document.domain
è ('example.com', 80)
, e il frame in basso è ('comet.example.com', 80)
, come si ottiene il frame inferiore come ('example.com', 80)
?
Non è possibile, come cambiare la parte hostname sarà necessariamente causare la porta ad essere impostata su null
, quindi la cosa migliore che puoi fare è ('example.com', null)
nel frame inferiore. Quindi anche il frame superiore deve essere impostato su quel valore e l'impostazione di document.domain=document.domain
fa proprio questo. Cambia la rappresentazione interna nel browser da ('example.com', 80)
a ('example.com', null)
e quindi tutto corrisponde alle opere di comunicazione frame cross-port/sottodominio.
fonte
2009-10-06 12:30:56
+1 per la prima frase :) –
Purtroppo questa soluzione non ha funzionato per me (vedi http://stackoverflow.com/questions/7796767/is-it-possibile-al-tuo-uno-frame-da-altre- using-javascript per i dettagli). L'aggiunta di "document.domain = document.domain" a tutti i frame non cambia il comportamento di Chrome. Qualche idea? –
Inoltre, ho capito che se avessi impostato un ritardo per il mio js, avrei almeno degli URL validi per entrambi i frame. Tuttavia, un frame non può accedere all'altro. –