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

WBOY
Lepaskan: 2016-05-16 16:05:46
asal
1240 orang telah melayarinya

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();
Salin selepas log masuk

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 , dan kandungan yang ditulis melalui pseudo-protocol iframe akan muncul yang baharu halaman seperti tetingkap.buka,
Tetapi 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.

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan