Bagaimana Anda mendengarkan acara itu terserah Anda, tetapi umumnya cara terbaik adalah:
1) buat iframe Anda secara terprogram
Itu memastikan loadpendengar Anda selalu dipanggil dengan melampirkannya sebelum iframe mulai memuat.
<script>var iframe = document.createElement('iframe');
iframe.onload =function(){ alert('myframe is loaded');};// before setting 'src'
iframe.src ='...';
document.body.appendChild(iframe);// add it to wherever you need it in the document</script>
2) javascript sebaris , adalah cara lain yang dapat Anda gunakan di dalam markup HTML Anda.
<script>function onMyFrameLoad(){
alert('myframe is loaded');};</script><iframe id="myframe" src="..." onload="onMyFrameLoad(this)"></iframe>
3) Anda juga dapat melampirkan pendengar acara setelah elemen , di dalam <script>tag, tetapi perlu diingat bahwa dalam kasus ini, ada sedikit peluang bahwa iframe sudah dimuat pada saat Anda menambahkan pendengar Anda. Karena itu ada kemungkinan bahwa itu tidak akan dipanggil (misalnya jika iframe sangat cepat, atau berasal dari cache).
<iframe id="myframe" src="..."></iframe><script>
document.getElementById('myframe').onload =function(){
alert('myframe is loaded');};</script>
Terima kasih, ini tepat seperti yang saya butuhkan!
Jaime Garcia
1
Dengan metode ini Anda hanya dapat menjalankan fungsi tunggal saat iframe dimuat. Lihat jawaban saya di bawah ini menggunakan addEventListeneryang memungkinkan beberapa panggilan balik berjalan pada acara memuat.
Iest
1
Pendekatan ini juga rentan terhadap kondisi balapan karena iframe dapat dimuat sebelum tag skrip dieksekusi.
Iest
7
Acara memuat tidak berfungsi ketika Anda mencoba mengunduh file.
Tidak satu pun dari jawaban di atas bekerja untuk saya, namun ini berhasil
PEMBARUAN :
Seperti @doppleganger tunjukkan di bawah, beban hilang pada jQuery 3.0, jadi inilah versi terbaru yang digunakan on. Harap dicatat ini sebenarnya akan berfungsi pada jQuery 1.7+, sehingga Anda dapat menerapkannya dengan cara ini bahkan jika Anda belum menggunakan jQuery 3.0.
Apakah saya khawatir debugger saya berhenti di breakpoint saya handleLoad()sebelum saya melihat render iFrame? Saya harap itu murni masalah rendering daripada masalah pemuatan konten.
Sridhar Sarnobat
bagaimana untuk menangkap acara itu dengan jquery ketika iframe sudah ada ... yaitu: iframe tidak dibuat oleh jquery.
gumuruh
3
Perhatikan bahwa acara onload sepertinya tidak akan aktif jika iframe dimuat saat offscreen. Ini sering terjadi ketika menggunakan tab "Buka di Jendela Baru" / w.
Saya tidak berpikir bahwa kode melakukan apa yang Anda pikirkan. Anda dapat mengganti pemilih "#iFrame" di biola Anda dengan apa pun dan peringatan itu masih menyala
roryok
6
Selain @roryok, api siap saat DOM siap, bukan seluruh halaman dimuat.
Ivan Nikitin
1
ready dipecat ketika DOM siap dan js dapat dieksekusi, bukan saat konten dimuat.
Sergey Gussak
2
$ ("# iframeid"). ready memicu fungsi ketika elemen berada di dom. Tidak ketika ifram selesai memuat.
Jawaban:
<iframe>
elemen punyaload
acara untuk itu.Bagaimana Anda mendengarkan acara itu terserah Anda, tetapi umumnya cara terbaik adalah:
1) buat iframe Anda secara terprogram
Itu memastikan
load
pendengar Anda selalu dipanggil dengan melampirkannya sebelum iframe mulai memuat.2) javascript sebaris , adalah cara lain yang dapat Anda gunakan di dalam markup HTML Anda.
3) Anda juga dapat melampirkan pendengar acara setelah elemen , di dalam
<script>
tag, tetapi perlu diingat bahwa dalam kasus ini, ada sedikit peluang bahwa iframe sudah dimuat pada saat Anda menambahkan pendengar Anda. Karena itu ada kemungkinan bahwa itu tidak akan dipanggil (misalnya jika iframe sangat cepat, atau berasal dari cache).Lihat juga jawaban saya yang lain tentang elemen mana yang juga dapat memecat jenis
load
peristiwa inisumber
addEventListener
yang memungkinkan beberapa panggilan balik berjalan pada acara memuat.Tidak satu pun dari jawaban di atas bekerja untuk saya, namun ini berhasil
PEMBARUAN :
Seperti @doppleganger tunjukkan di bawah, beban hilang pada jQuery 3.0, jadi inilah versi terbaru yang digunakan
on
. Harap dicatat ini sebenarnya akan berfungsi pada jQuery 1.7+, sehingga Anda dapat menerapkannya dengan cara ini bahkan jika Anda belum menggunakan jQuery 3.0.sumber
load
hilang. Silakan gunakan.on('load', function() { ... })
sebagai gantinya.jquery
ataujqLite
ini adalah cara untuk pergi!Ada cara lain yang konsisten ( hanya untuk IE9 + ) dalam JavaScript vanilla untuk ini:
Dan jika Anda tertarik pada Observables, ini akan membantu:
sumber
handleLoad()
sebelum saya melihat render iFrame? Saya harap itu murni masalah rendering daripada masalah pemuatan konten.Perhatikan bahwa acara onload sepertinya tidak akan aktif jika iframe dimuat saat offscreen. Ini sering terjadi ketika menggunakan tab "Buka di Jendela Baru" / w.
sumber
Anda juga dapat menangkap acara siap jquery dengan cara ini:
Berikut ini contoh kerjanya:
http://jsfiddle.net/ZrFzF/
sumber