Ich habe diesen Code tatsächlich geschrieben.
Wenn versucht wird, Cross-Subdomain/Port-Comet zu erstellen, muss der Iframe denselben document.domain
-Wert wie der übergeordnete Frame haben. Leider speichert der Browser intern den Domänennamen AND-Port für den ursprünglichen Wert document.domain
. Aber der Getter und Setter in Javascript weiß nichts über den Port. Also das Problem ist das: Wenn der obere Rahmen document.domain
('example.com', 80)
ist, und der untere Rahmen ist ('comet.example.com', 80)
, wie erhalten Sie den unteren Rahmen zu ('example.com', 80)
als auch?
Sie können nicht, da das Ändern der Hostname Teil wird zwangsläufig dazu führen, dass der Port auf null
gesetzt wird, so dass Sie am besten ('example.com', null)
im unteren Rahmen tun können. Also muss der obere Rahmen auch auf diesen Wert eingestellt werden, und die Einstellung document.domain=document.domain
tut genau das. Es ändert die interne Darstellung im Browser von ('example.com', 80)
zu ('example.com', null)
und dann stimmt alles überein und Cross-Port/Subdomain Frame-Kommunikation funktioniert.
+1 für den ersten Satz :) –
Diese Lösung hat leider nicht für mich funktioniert (siehe http://stackoverflow.com/questions/7796767/is-it-possible-to-alter-one-frame-from-and-) using-javascript für Details). Das Hinzufügen von "document.domain = document.domain" zu allen Frames ändert nicht das Verhalten von Chrome. Irgendwelche Ideen? –
Außerdem habe ich herausgefunden, dass ich, wenn ich eine Verzögerung für meine js einstelle, zumindest gültige URLs für beide Frames bekomme. Dennoch kann ein Frame nicht auf den anderen zugreifen. –