Saya mencoba mendeteksi ketika iframe dan kontennya dimuat tetapi tidak terlalu beruntung. Aplikasi saya mengambil beberapa masukan di bidang teks di jendela induk dan memperbarui iframe untuk memberikan 'pratinjau langsung'
Saya mulai dengan kode berikut (YUI) untuk mendeteksi saat peristiwa pemuatan iframe terjadi.
$E.on('preview-pane', 'load', function(){
previewBody = $('preview-pane').contentWindow.document.getElementsByTagName('body')[0];
}
'preview-pane' adalah ID dari iframe saya dan saya menggunakan YUI untuk melampirkan event handler. Namun, mencoba mengakses tubuh di callback saya (saat memuat iframe) gagal, saya pikir karena iframe dimuat sebelum event handler siap. Kode ini berfungsi jika saya menunda pemuatan iframe dengan membuat skrip php yang membuatnya tidur.
Pada dasarnya, saya bertanya apa pendekatan yang benar di seluruh browser untuk mendeteksi ketika iframe telah dimuat dan dokumennya siap?
sumber
Jawaban:
Ini ideal jika Anda bisa mendapatkan iframe untuk memberi tahu Anda sendiri dari skrip di dalam bingkai. Misalnya itu bisa memanggil fungsi induk secara langsung untuk memberi tahu itu sudah siap. Perawatan selalu diperlukan dengan eksekusi kode lintas frame karena hal-hal dapat terjadi dalam urutan yang tidak Anda harapkan. Alternatif lain adalah menyetel 'var isready = true;' dalam cakupannya sendiri, dan memiliki skrip induk mengendus untuk 'contentWindow.isready' (dan menambahkan handler onload jika tidak).
Jika karena alasan tertentu tidak praktis untuk membuat dokumen iframe bekerja sama, Anda memiliki masalah perlombaan beban tradisional, yaitu meskipun elemennya tepat bersebelahan:
<img id="x" ... /> <script type="text/javascript"> document.getElementById('x').onload= function() { ... }; </script>
tidak ada jaminan bahwa item tersebut belum dimuat pada saat skrip dijalankan.
Cara keluar dari balapan beban adalah:
di IE, Anda dapat menggunakan properti 'readyState' untuk melihat apakah ada sesuatu yang sudah dimuat;
jika memiliki item yang hanya tersedia dengan JavaScript diaktifkan dapat diterima, Anda dapat membuatnya secara dinamis, menyetel fungsi peristiwa 'onload' sebelum menyetel sumber dan menambahkan ke halaman. Dalam kasus ini, ini tidak dapat dimuat sebelum callback disetel;
cara lama untuk memasukkannya ke dalam markup:
<img onload="callback(this)" ... />
Penangan 'online' inline di HTML hampir selalu merupakan hal yang salah dan harus dihindari, tetapi dalam kasus ini terkadang itu adalah opsi yang paling tidak buruk.
sumber
Lihat postingan blog ini . Ini menggunakan jQuery, tetapi itu akan membantu Anda bahkan jika Anda tidak menggunakannya.
Pada dasarnya Anda menambahkan ini ke file
document.ready()
$('iframe').load(function() { RunAfterIFrameLoaded(); });
sumber
console.log
. itu akan dicatat setelah iframe dimuat.Bagi mereka yang menggunakan React, mendeteksi peristiwa pemuatan iframe asal yang sama semudah menyetel
onLoad
event listener pada elemen iframe.<iframe src={'path-to-iframe-source'} onLoad={this.loadListener} frameBorder={0} />
sumber
onLoad
peristiwa hanya dapat memicu iframe asal yang sama?Untuk siapa pun yang menggunakan Ember, ini akan berfungsi seperti yang diharapkan:
<iframe onLoad={{action 'actionName'}} frameborder='0' src={{iframeSrc}} />
sumber