Kami sering menjalankan operasi pada halaman induk dan halaman iframe, seperti
Kandungan di dalam iframe ini ditulis dalam js. Seperti kod berikut
var iframe = document.getElementById("iframe"), doc = iframe.contentWindow.document; doc.open(); doc.write("---------something------"); doc.close();
Kod di atas adalah betul dalam kebanyakan kes. Tetapi terdapat situasi di mana halaman induk secara eksplisit menulis document.domain = "xxx";
Dalam siri IE (saya belum mencubanya pada IE10), akan berlaku ralat kerana tiada kebenaran. Tiada masalah dalam firefox dan chrome.
Mengapa ini? Ini adalah pepijat dalam IE, iaitu, apabila halaman induk tidak menetapkan document.domain secara eksplisit, iframe akan lalai kepada document.domain yang sama dengan halaman induk, iaitu, kedua-duanya ialah
halaman location.host, ibu bapa dan anak boleh berkomunikasi, iaitu contoh pengepala artikel, tetapi apabila halaman induk secara eksplisit menetapkan document.domain="", halaman dalam iframe juga mesti menetapkan document.domain secara eksplisit = "xxx", jika tidak
Jika anda tidak mempunyai kebenaran untuk mendapatkan iframe.contentWindow.document, anda tidak boleh menulis kandungan secara dinamik, anda juga boleh membuat iframe menghala ke halaman tertentu secara eksplisit. xxx", dan kemudian melalui artikel The starting square
, tetapi masalahnya ialah halaman induk saya mempunyai banyak iframe sedemikian, dan nombornya tidak diketahui (semuanya adalah ruang pengiklanan), jadi ia tidak boleh melepasi halaman tertentu.
Masalah timbul dalam kes ini, kami seolah-olah tiada penyelesaian
1. Halaman induk ditetapkan dan mesti menetapkan document.domain
dengan jelas2. Kandungan halaman iframe perlu dijana secara dinamik oleh js.
3. Tiada peluang untuk menetapkan src untuk iframe.
Tetapi apabila ketiga-tiga syarat di atas dipenuhi, kita boleh menyelesaikan masalah seperti ini melalui pseudo-protocol.
Dengan cara ini, document.domain iframe boleh ditetapkan secara eksplisit supaya konsisten dengan halaman induk.
Selepas menulis ini, keperluan untuk menulis kandungan iframe secara dinamik sememangnya direalisasikan, tetapi halaman ini akan muncul secara berasingan, seperti window.open();
kenapa ni? Ini juga merupakan pepijat dalam siri IE, iaitu, halaman induk mempunyai
Tetapi
Ini menyelesaikan masalah.
Walaupun pseudo-protocol boleh menyelesaikan masalah ini, terdapat beberapa risiko Jangan gunakan kaedah ini secara sambil lewa melainkan ia benar-benar perlu.