Kami menggunakan jQuery thickbox untuk secara dinamis menampilkan iframe ketika seseorang mengklik gambar. Dalam iframe ini, kami menggunakan galleria perpustakaan javascript untuk menampilkan banyak gambar.
Masalahnya adalah bahwa $(document).ready
dalam iframe tampaknya dipecat terlalu cepat dan konten iframe bahkan belum dimuat, jadi kode galleria tidak diterapkan dengan benar pada elemen DOM. $(document).ready
tampaknya menggunakan status siap induk iframe untuk memutuskan apakah iframe siap.
Jika kita mengekstrak fungsi yang disebut oleh dokumen siap dalam fungsi terpisah dan memanggilnya setelah batas waktu 100 ms. Ini bekerja, tetapi kami tidak dapat mengambil risiko dalam produksi dengan komputer yang lambat.
$(document).ready(function() { setTimeout(ApplyGalleria, 100); });
Pertanyaan saya: acara jQuery mana yang harus kita ikat untuk dapat mengeksekusi kode kita ketika iframe dinamis sudah siap dan bukan hanya itu orangtua?
Jawaban:
Saya menjawab pertanyaan serupa (lihat Javascript callback ketika IFRAME selesai memuat? ). Anda dapat memperoleh kendali atas acara pemuatan iframe dengan kode berikut:
Dalam berurusan dengan iframe, saya menemukan cukup baik untuk menggunakan memuat acara, bukan acara siap dokumen.
sumber
.load()
acara sudah usang. Gunakan.on( "load", handler )
sebagai gantinya.Menggunakan jQuery 1.3.2 berikut ini bekerja untuk saya:
REVISI:! Sebenarnya kode di atas terkadang terlihat berfungsi di Firefox, tidak pernah terlihat berfungsi di Opera.
Alih-alih saya menerapkan solusi pemungutan suara untuk tujuan saya. Sederhana seperti ini:
Ini tidak memerlukan kode di halaman iframe yang dipanggil. Semua kode berada dan dijalankan dari bingkai / jendela induk.
sumber
setInterval
jajak pendapat sebagai gantinya.Di IFrames saya biasanya menyelesaikan masalah ini dengan meletakkan skrip kecil di bagian paling akhir dari blok:
Ini bekerja sebagian besar waktu untuk saya. Terkadang solusi paling sederhana dan paling naif adalah yang paling tepat.
sumber
parent
untuk mengambil salinan jQuery dan menggunakannyaparent.$(document).ready(function(){ parent.IFrameLoaded( ); });
untuk menginisialisasi iframe.Mengikuti ide DrJokepu dan David Murdoch saya mengimplementasikan versi yang lebih lengkap. Ini membutuhkan jQuery di kedua induk dan iframe dan iframe berada di kendali Anda.
kode iframe:
kode uji induk:
sumber
Menemukan solusi untuk masalah tersebut.
Saat Anda mengeklik tautan kotak tebal yang membuka iframe, itu memasukkan iframe dengan id TB_iframeContent.
Alih-alih mengandalkan
$(document).ready
acara dalam kode iframe, saya hanya harus mengikat ke acara memuat iframe di dokumen induk:Kode ini ada di iframe tetapi mengikat ke acara kontrol dalam dokumen induk. Ia bekerja di FireFox dan IE.
sumber
top.document
yang memungkinkan saya untuk memiliki kode di dalam iframe dapat mengetahui kapan iframe telah dimuat. (Meskipunload
telah usang sejak jawaban ini, dan harus diganti denganon("load")
.)Pada dasarnya apa yang sudah diposkan orang lain tetapi IMHO sedikit lebih bersih:
sumber
Coba ini,
Yang perlu Anda lakukan adalah membuat fungsi JavaScript testframe_loaded ().
sumber
Saya memuat PDF dengan jQuery ajax ke cache browser. Lalu saya membuat elemen tertanam dengan data yang sudah ada di cache browser. Saya kira itu akan bekerja dengan iframe juga.
Anda harus mengatur tajuk http dengan benar.
sumber
Ini adalah masalah persis yang saya temui dengan klien kami. Saya membuat plugin jquery kecil yang tampaknya berfungsi untuk kesiapan iframe. Menggunakan polling untuk memeriksa dokumen iframe readyState yang dikombinasikan dengan url dokumen bagian dalam yang dikombinasikan dengan sumber iframe untuk memastikan iframe sebenarnya "siap".
Masalah dengan "onload" adalah bahwa Anda memerlukan akses ke iframe aktual yang ditambahkan ke DOM, jika Anda tidak maka Anda perlu mencoba untuk menangkap pemuatan iframe yang jika di-cache maka Anda mungkin tidak. Yang saya butuhkan adalah skrip yang bisa dipanggil kapan saja, dan menentukan apakah iframe itu "siap" atau tidak.
Inilah pertanyaannya:
Cawan suci untuk menentukan apakah iframe lokal telah dimuat atau tidak
dan inilah jsfiddle yang akhirnya kutemukan.
https://jsfiddle.net/q0smjkh5/10/
Dalam jsfiddle di atas, saya menunggu onload untuk menambahkan iframe ke dom, kemudian memeriksa status ready dokumen dalam iframe - yang harus lintas domain karena itu menunjuk ke wikipedia - tetapi Chrome tampaknya melaporkan "lengkap". Metode iready plug-in kemudian dipanggil ketika iframe sebenarnya sudah siap. Callback mencoba untuk memeriksa status siap dokumen dalam lagi - kali ini melaporkan permintaan lintas domain (yang benar) - bagaimanapun tampaknya berfungsi untuk apa yang saya butuhkan dan berharap itu membantu orang lain.
sumber
Fungsi dari jawaban ini adalah cara terbaik untuk menangani ini karena
$.ready
gagal secara eksplisit untuk iframe. Inilah keputusan untuk tidak mendukung ini.The
load
event juga tidak api jika iframe telah dimuat. Sangat frustasi bahwa ini tetap menjadi masalah di tahun 2020!}
sumber