<iframe>les éléments ont un loadévénement pour cela.
La manière dont vous écoutez cet événement dépend de vous, mais en général, la meilleure façon est de:
1) Créez votre iframe par programmation
Il s'assure que votre loadauditeur est toujours appelé en l'attachant avant que l'iframe ne commence à se charger.
<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 en ligne , est un autre moyen que vous pouvez utiliser dans votre balisage HTML.
<script>function onMyFrameLoad(){
alert('myframe is loaded');};</script><iframe id="myframe" src="..." onload="onMyFrameLoad(this)"></iframe>
3) Vous pouvez également attacher l'écouteur d'événement après l'élément , à l'intérieur d'une <script>balise, mais gardez à l'esprit que dans ce cas, il y a une légère chance que l'iframe soit déjà chargé au moment où vous ajoutez votre auditeur. Il est donc possible qu'il ne soit pas appelé (par exemple si l'iframe est très très rapide, ou provient du cache).
<iframe id="myframe" src="..."></iframe><script>
document.getElementById('myframe').onload =function(){
alert('myframe is loaded');};</script>
Merci, cela fait exactement ce dont j'avais besoin!
Jaime Garcia
1
Avec cette méthode, vous ne pouvez exécuter qu'une seule fonction lorsque l'iframe est chargé. Voir ma réponse ci-dessous en utilisant addEventListenerqui permet à plusieurs rappels de s'exécuter sur l'événement de chargement.
Iest
1
Cette approche est également vulnérable à une condition de concurrence, car l'iframe pourrait se charger avant l'exécution de la balise de script.
Iest
7
L'événement de chargement ne fonctionne pas lorsque vous essayez de télécharger un fichier.
Aucune des réponses ci-dessus n'a fonctionné pour moi, mais cela a fonctionné
MISE À JOUR :
Comme @doppleganger l'a souligné ci-dessous, la charge a disparu à partir de jQuery 3.0, voici donc une version mise à jour qui utilise on. Veuillez noter que cela fonctionnera réellement sur jQuery 1.7+, vous pouvez donc l'implémenter de cette façon même si vous n'êtes pas encore sur jQuery 3.0.
Est-ce un problème que mon débogueur s'arrête à mon point d'arrêt handleLoad()avant de voir le rendu iFrame? J'espère que c'est purement un problème de rendu plutôt qu'un problème de chargement de contenu.
Sridhar Sarnobat le
que diriez-vous de capturer cet événement par jquery quand l'iframe est déjà là ... c'est à dire: l'iframe n'est pas créé par jquery.
gumuruh
3
Notez que l'événement onload ne semble pas se déclencher si l'iframe est chargé lorsqu'il est hors écran. Cela se produit fréquemment lors de l'utilisation des onglets «Ouvrir dans une nouvelle fenêtre» / w.
Je ne pense pas que ce code fasse ce que vous pensez qu'il fait. Vous pouvez remplacer ce sélecteur "#iFrame" dans votre violon par n'importe quoi et l'alerte se déclenche toujours
roryok
6
En plus de @roryok, ready se déclenche lorsque le DOM est prêt, pas la page entière se charge.
Ivan Nikitin
1
ready est déclenché lorsque le DOM est prêt et js peut être exécuté, pas lorsque le contenu est chargé.
Sergey Gussak
2
$ ("# iframeid"). ready déclenche la fonction lorsque l'élément est dans le dom. Pas lorsque l'ifram a fini de se charger.
Réponses:
<iframe>
les éléments ont unload
événement pour cela.La manière dont vous écoutez cet événement dépend de vous, mais en général, la meilleure façon est de:
1) Créez votre iframe par programmation
Il s'assure que votre
load
auditeur est toujours appelé en l'attachant avant que l'iframe ne commence à se charger.2) javascript en ligne , est un autre moyen que vous pouvez utiliser dans votre balisage HTML.
3) Vous pouvez également attacher l'écouteur d'événement après l'élément , à l'intérieur d'une
<script>
balise, mais gardez à l'esprit que dans ce cas, il y a une légère chance que l'iframe soit déjà chargé au moment où vous ajoutez votre auditeur. Il est donc possible qu'il ne soit pas appelé (par exemple si l'iframe est très très rapide, ou provient du cache).Voir aussi mon autre réponse sur les éléments qui peuvent également déclencher ce type d'
load
événementla source
addEventListener
qui permet à plusieurs rappels de s'exécuter sur l'événement de chargement.Aucune des réponses ci-dessus n'a fonctionné pour moi, mais cela a fonctionné
MISE À JOUR :
Comme @doppleganger l'a souligné ci-dessous, la charge a disparu à partir de jQuery 3.0, voici donc une version mise à jour qui utilise
on
. Veuillez noter que cela fonctionnera réellement sur jQuery 1.7+, vous pouvez donc l'implémenter de cette façon même si vous n'êtes pas encore sur jQuery 3.0.la source
load
est parti. Veuillez utiliser à la.on('load', function() { ... })
place.jquery
oujqLite
alors c'est la voie à suivre!Il existe une autre méthode cohérente ( uniquement pour IE9 + ) en JavaScript vanille pour cela:
Et si vous êtes intéressé par Observables, cela fait l'affaire:
la source
handleLoad()
avant de voir le rendu iFrame? J'espère que c'est purement un problème de rendu plutôt qu'un problème de chargement de contenu.Notez que l'événement onload ne semble pas se déclencher si l'iframe est chargé lorsqu'il est hors écran. Cela se produit fréquemment lors de l'utilisation des onglets «Ouvrir dans une nouvelle fenêtre» / w.
la source
Vous pouvez également capturer un événement prêt pour jquery de cette façon:
Voici un exemple de travail:
http://jsfiddle.net/ZrFzF/
la source