Wie Sie diesem Ereignis zuhören, liegt bei Ihnen, aber im Allgemeinen ist der beste Weg:
1) Erstellen Sie Ihren Iframe programmgesteuert
Es stellt sicher, dass Ihr loadListener immer aufgerufen wird, indem Sie ihn anhängen, bevor der Iframe geladen wird.
<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) Inline-Javascript ist eine weitere Möglichkeit, die Sie in Ihrem HTML-Markup verwenden können.
<script>function onMyFrameLoad(){
alert('myframe is loaded');};</script><iframe id="myframe" src="..." onload="onMyFrameLoad(this)"></iframe>
3) Sie können den Ereignis-Listener auch nach dem Element in einem <script>Tag anhängen. Beachten Sie jedoch, dass in diesem Fall die Wahrscheinlichkeit gering ist, dass der Iframe bereits geladen ist, wenn Sie Ihren Listener hinzufügen. Daher ist es möglich, dass es nicht aufgerufen wird (z. B. wenn der Iframe sehr, sehr schnell ist oder aus dem Cache stammt).
<iframe id="myframe" src="..."></iframe><script>
document.getElementById('myframe').onload =function(){
alert('myframe is loaded');};</script>
Mit dieser Methode können Sie nur eine einzige Funktion ausführen, wenn der Iframe geladen ist. Siehe meine Antwort unten, mit addEventListenerder mehrere Rückrufe für das Ladeereignis ausgeführt werden können.
Iest
1
Dieser Ansatz ist auch anfällig für eine Race-Bedingung, da der Iframe geladen werden kann, bevor das Skript-Tag ausgeführt wird.
Iest
7
Das Ladeereignis funktioniert nicht, wenn Sie versuchen, eine Datei herunterzuladen.
Keine der oben genannten Antworten hat bei mir funktioniert, dies hat jedoch funktioniert
UPDATE :
Wie @doppleganger weiter unten ausgeführt hat, ist das Laden ab jQuery 3.0 weg. Hier ist eine aktualisierte Version, die verwendet wird on. Bitte beachten Sie, dass dies unter jQuery 1.7+ tatsächlich funktioniert, sodass Sie es auf diese Weise implementieren können, auch wenn Sie noch nicht unter jQuery 3.0 arbeiten.
Ist es ein handleLoad()Problem, dass mein Debugger an meinem Haltepunkt stoppt, bevor ich den iFrame-Render sehe? Ich hoffe, dass dies eher ein Rendering-Problem als ein Problem beim Laden von Inhalten ist.
Sridhar Sarnobat
Wie wäre es, dieses Ereignis mit jquery zu erfassen, wenn der Iframe bereits vorhanden ist ... dh: Der Iframe wird nicht mit jquery erstellt.
Gumuruh
3
Beachten Sie, dass das Onload-Ereignis nicht ausgelöst zu werden scheint, wenn der Iframe außerhalb des Bildschirms geladen wird. Dies tritt häufig auf, wenn die Registerkarten "In neuem Fenster öffnen" / w verwendet werden.
Ich glaube nicht, dass dieser Code das tut, was Sie denken. Sie können diesen "#iFrame" -Selektor in Ihrer Geige durch irgendetwas ersetzen und der Alarm wird immer noch
ausgelöst
6
Zusätzlich zu @roryok wird ready ausgelöst, wenn DOM bereit ist, und nicht die gesamte Seite wird geladen.
Ivan Nikitin
1
ready wird ausgelöst, wenn das DOM bereit ist und js ausgeführt werden kann, nicht wenn der Inhalt geladen wird.
Sergey Gussak
2
$ ("# iframeid"). ready löst die Funktion aus, wenn sich das Element im dom befindet. Nicht, wenn das ifram vollständig geladen wurde.
Antworten:
<iframe>
Elemente haben einload
Ereignis dafür.Wie Sie diesem Ereignis zuhören, liegt bei Ihnen, aber im Allgemeinen ist der beste Weg:
1) Erstellen Sie Ihren Iframe programmgesteuert
Es stellt sicher, dass Ihr
load
Listener immer aufgerufen wird, indem Sie ihn anhängen, bevor der Iframe geladen wird.2) Inline-Javascript ist eine weitere Möglichkeit, die Sie in Ihrem HTML-Markup verwenden können.
3) Sie können den Ereignis-Listener auch nach dem Element in einem
<script>
Tag anhängen. Beachten Sie jedoch, dass in diesem Fall die Wahrscheinlichkeit gering ist, dass der Iframe bereits geladen ist, wenn Sie Ihren Listener hinzufügen. Daher ist es möglich, dass es nicht aufgerufen wird (z. B. wenn der Iframe sehr, sehr schnell ist oder aus dem Cache stammt).Siehe auch meine andere Antwort über welche Elemente diese Art von
load
Ereignis ebenfalls auslösen könnenquelle
addEventListener
der mehrere Rückrufe für das Ladeereignis ausgeführt werden können.Keine der oben genannten Antworten hat bei mir funktioniert, dies hat jedoch funktioniert
UPDATE :
Wie @doppleganger weiter unten ausgeführt hat, ist das Laden ab jQuery 3.0 weg. Hier ist eine aktualisierte Version, die verwendet wird
on
. Bitte beachten Sie, dass dies unter jQuery 1.7+ tatsächlich funktioniert, sodass Sie es auf diese Weise implementieren können, auch wenn Sie noch nicht unter jQuery 3.0 arbeiten.quelle
load
ist weg. Bitte verwenden Sie.on('load', function() { ... })
stattdessen.jquery
oderjqLite
dann ist dies der richtige Weg!Es gibt einen anderen konsistenten Weg (Hierfür gibt es in Vanilla JavaScript einen nur für IE9 + ):
Und wenn Sie an Observables interessiert sind, ist dies der Trick:
quelle
handleLoad()
Problem, dass mein Debugger an meinem Haltepunkt stoppt, bevor ich den iFrame-Render sehe? Ich hoffe, dass dies eher ein Rendering-Problem als ein Problem beim Laden von Inhalten ist.Beachten Sie, dass das Onload-Ereignis nicht ausgelöst zu werden scheint, wenn der Iframe außerhalb des Bildschirms geladen wird. Dies tritt häufig auf, wenn die Registerkarten "In neuem Fenster öffnen" / w verwendet werden.
quelle
Sie können jquery ready-Ereignisse auch folgendermaßen erfassen:
Hier ist ein Arbeitsbeispiel:
http://jsfiddle.net/ZrFzF/
quelle