Rumah  >  Artikel  >  hujung hadapan web  >  Selesaikan masalah komunikasi antara halaman induk dan halaman iframe melalui kemahiran pseudo-protocol_javascript

Selesaikan masalah komunikasi antara halaman induk dan halaman iframe melalui kemahiran pseudo-protocol_javascript

WBOY
WBOYasal
2016-05-16 16:05:461243semak imbas

Kami sering menjalankan operasi pada halaman induk dan halaman iframe, seperti

939370b3c8787d52ac84eef51d6f9a93065276f04003e4622c4fe6b64f465b88

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 jelas

2. 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.

Salin kod Kod adalah seperti berikut:

iframe.src="javascript:void((function(){var d=document;d.open();d.domain='xxx;d.write('---something');d.close()} )())";

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 5d43740c2c81c12a30358e8bd80a5b616f6cb83b34cb7f2d6a4aed109317b73a, dan kandungan yang ditulis melalui pseudo-protocol iframe akan muncul yang baharu halaman seperti tetingkap.buka,
Tetapi 5054d5c2012ec79898c4ccca953b9e1e halaman induk mestilah _diri, jadi anda hanya boleh menetapkan sasaran asas kepada _diri sebelum memanggil iframe.src Selepas kandungan ditulis, tetapkan sasaran asas kepada _kosong

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.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn