Saya sebenarnya menulis kode ini.
Saat mencoba melakukan cross-subdomain / port comet, iframe harus memiliki nilai yang sama document.domain
dengan kerangka induk. Sayangnya, browser menyimpan nama domain DAN port secara internal untuk nilai aslinya document.domain
. Tapi pengambil dan penyetel di javascript tidak tahu apa-apa tentang port. Jadi masalahnya adalah ini: jika bingkai atas document.domain
adalah ('example.com', 80)
, dan bingkai bawah adalah ('comet.example.com', 80)
, bagaimana Anda mendapatkan bingkai bawah ('example.com', 80)
juga?
Anda tidak bisa, karena mengubah bagian nama host akan menyebabkan port diatur ke null
, jadi yang terbaik yang dapat Anda lakukan adalah ('example.com', null)
di bingkai bawah. Jadi bingkai atas juga perlu disetel ke nilai itu, dan setelan document.domain=document.domain
tidak hanya itu. Ini mengubah representasi internal di browser dari ('example.com', 80)
menjadi ('example.com', null)
dan kemudian semuanya cocok dan komunikasi bingkai lintas-port / subdomain berfungsi.
Browser membedakan antara (a) document.domain saat tidak disetel secara eksplisit dan (b) document.domain saat disetel secara eksplisit ... meskipun mereka mengembalikan nilai yang sama.
Menyetel nilai secara eksplisit menunjukkan niat untuk "bekerja sama" dengan skrip di subdomain lain (di bawah domain induk yang sama).
Jika KEDUA laman induk DAN skrip eksternal secara eksplisit menyetel document.domain ke nilai yang sama, pembatasan kebijakan asal yang sama dapat dilewati dan setiap skrip dapat mengakses semua objek (jika tidak dibatasi) dan properti konteks satu sama lain.
sumber
Saya menemukan info berikut di situs ini: devguru . Lebih konkretnya, inilah kutipannya:
Menurut saya, ini memungkinkan pembuatan skrip lintas situs untuk domain yang sama (meskipun subdomain berbeda).
Saya kira jika Anda tidak menyentuh document.domain, mesin js hanya mengizinkan javascript lain dari domain yang sama. Dengan properti itu, Anda akan dapat menerapkan ke sub-domain lain seperti status dokumen yang mengorbit.
sumber
document.domain = document.domain
adalah tidak noop a.The
document.domain
menarik default dari URL yang sebenarnya jika tidak secara eksplisit diatur. Browser akan merekam jikadocument.domain
telah datang sebagai default dari URL atau jika ditetapkan secara eksplisit. Keduanya harus menjadi default untuk domain yang sama atau keduanya harus secara eksplisit diatur ke domain yang sama agar ini berfungsi. Jika salah satunya adalah default dan satu ditetapkan secara eksplisit, keduanya cocok jika dibaca, kedua halaman tersebut masih akan dilarang untuk berbicara satu sama lain.Lihat: https://developer.mozilla.org/en-US/docs/DOM/document.domain
sumber