Właściwie napisałem ten kod.
Podczas próby wykonania komety cross-subdomain / port, iframe musi mieć taką samą document.domain
wartość jak ramka nadrzędna. Niestety, przeglądarka przechowuje wewnętrznie nazwę domeny ORAZ port dla oryginalnej document.domain
wartości. Ale getter i setter w javascript nie wiedzą nic o porcie. A więc problem jest taki: jeśli górna rama document.domain
jest ('example.com', 80)
, a dolna - to ('comet.example.com', 80)
jak sprawić, by dolna rama była ('example.com', 80)
również?
Nie możesz, ponieważ zmiana części nazwy hosta koniecznie spowoduje ustawienie portu null
, więc najlepsze, co możesz zrobić, jest ('example.com', null)
w dolnej ramce. Zatem górna rama również musi być ustawiona na tę wartość, a ustawienie document.domain=document.domain
to właśnie robi. Zmienia wewnętrzną reprezentację w przeglądarce z ('example.com', 80)
na, ('example.com', null)
a następnie wszystko się zgadza i działa komunikacja między portami / subdomenami.