Abfrage, ob die Seite vollständig geladen wurde
Daniel Scholz
- javascript
Ich habe eine kurze frage:
Ich habe eine Funktion h();, die genau dann aufgerufen werden soll, wenn meine seite komplett, also inkl. aller bilder, geladen wurde!
Wie mache ich das?
vielen Dank,
daniel
Ich habe eine kurze frage:
Ich habe eine Funktion h();, die genau dann aufgerufen werden soll, wenn meine seite komplett, also inkl. aller bilder, geladen wurde!
Wie mache ich das?vielen Dank,
daniel
moin<
also ich bin ja nich der js-profi, aber ich denke nicht, dass das möglich is
sicherlich kannst du dadurch, dass die funktion am schluss der seite aufgerufen wird feststellen, ob der komplette html-code übertragen konnte, aber nicht, ob z.B. ein bild ordnungsgemäß geladen wurde
gruß
hallo Sorgenkind,
also ich bin ja nich der js-profi
Das ist nich so _sehr_ wichtig
aber ich denke nicht, dass das möglich is
Aber das ist wichtig. Ich glaub ja, daß du so denkst -
Trotzdem ist das natürlich möglich, was Daniel möchte, und auch auf mehreren verschiedenen Wegen. Das Problem ist allenfalls, daß wir nicht wissen, was Daniel bereits unternommen (manche sagen fälschlicherweise "programmiert" dazu) hat. Wir kennen keinen Beispielcode von Daniel, und auch keine URL
sicherlich kannst du dadurch, dass die funktion am schluss der seite aufgerufen wird feststellen, ob der komplette html-code übertragen konnte, aber nicht, ob z.B. ein bild ordnungsgemäß geladen wurde
Das ist teilweise richtig. Du setzt aber voraus, daß:
1. der benutzte Browser das HTML-Dokument von oben nach unten liest
2. die Javascript-Anweisung erst "spät" gelesen wird
3. die zu ladende Grafik so groß ist, daß ihre "Ladezeit" die "Ausführzeit" des Javascript-Codes übersteigt
Fürs erste könnte man Daniel sagen, daß sich in sein Javascript ja auch ein Timeout-Wert einbauen ließe, so daß er erst nach einer gewissen Zeitspanne, in der vielleicht die Grafik dann geladen wurde, ausgeführt wird (das ist aber eine mehr als wacklige These)
Um da genauer helfen zu können, müssen wir den Code wenigstens in den in Frage kommenden Teilen kennen.
Grüße aus Berlin
Christoph S.
PS: du bist seit einger Zeit relativ oft im Forum zu finden. Das ist schon ok, aber du solltest dir doch mal anschauen, _wie_ hier Zitate aus vorangegangenen postings eingebaut werden sollen. Und daß auch eine "Antwort" eine Anrede braucht, steht, wie vieles anderes Wissenswertes ebenfalls, in der FAQ - die du natürlich inzwischen auswendig kennt, gelle?
hallo Sorgenkind,
rehi
Trotzdem ist das natürlich möglich, was Daniel möchte, und auch auf mehreren verschiedenen Wegen. Das Problem ist allenfalls, daß wir nicht wissen, was Daniel bereits unternommen (manche sagen fälschlicherweise "programmiert" dazu) hat. Wir kennen keinen Beispielcode von Daniel, und auch keine URL
wenn man keinen beispielcode kennt schreibt man einen oder?
ich mein wenn man ein problem lösen will, und nich weiß, wie man überhaupt rangehen kann, dann gibt es auch keinen beispielcode
(ich weiß jetz nich mehr, ob er geschrieben hatte, ob es bereits ansätze gibt, jedoch sollte das doch im endeffekt egal sein)
sicherlich kannst du dadurch, dass die funktion am schluss der seite aufgerufen wird feststellen, ob der komplette html-code übertragen konnte, aber nicht, ob z.B. ein bild ordnungsgemäß geladen wurde
Das ist teilweise richtig. Du setzt aber voraus, daß:
- der benutzte Browser das HTML-Dokument von oben nach unten liest
tut er denn das nich?
dann hätten schon so einige seiten von mirnicht funktioniert (HÄTTEN)
- die Javascript-Anweisung erst "spät" gelesen wird
jep, am besten am schluss, nach </body>, wenns geht
- die zu ladende Grafik so groß ist, daß ihre "Ladezeit" die "Ausführzeit" des Javascript-Codes übersteigt
oder die internetverbindung so langsam ist / ausgelastet ist, dass das timeout des browsers erreicht ist, und somit die grafik nicht geladen wurde
Fürs erste könnte man Daniel sagen, daß sich in sein Javascript ja auch ein Timeout-Wert einbauen ließe, so daß er erst nach einer gewissen Zeitspanne, in der vielleicht die Grafik dann geladen wurde, ausgeführt wird (das ist aber eine mehr als wacklige These)
Um da genauer helfen zu können, müssen wir den Code wenigstens in den in Frage kommenden Teilen kennen.
wie würdest du rangehen? (ich kann mir im moment nich vorstellen, wie das gehen soll ... außer eventuell, wenn man die breite & höhe abfragt, aber das kann auch schief gehen, wenn der browser ein platzhalterelement einsetzt, natürlich in größe der grafik)
Grüße aus Berlin
Christoph S.
PS: du bist seit einger Zeit relativ oft im Forum zu finden. Das ist schon ok, aber du solltest dir doch mal anschauen, _wie_ hier Zitate aus vorangegangenen postings eingebaut werden sollen. Und daß auch eine "Antwort" eine Anrede braucht, steht, wie vieles anderes Wissenswertes ebenfalls, in der FAQ - die du natürlich inzwischen auswendig kennt, gelle?
werde ich machen ..... bin ich so schlimm?
da hab ich noch nie reingeschaut, meine posts sind so, wie ich mich in einem gespräch verhalten würde .... halt meine persönlichkeit
wenn es so dermaßen stört kann ich da gerne etwas gegen tun, bzw. es versuchen, mein wesen ist sehr geprägt und gefestigt, was es mir erschweren dürfte daran zu denken
PS: hab nich umsonst den präfix "Sorgenkind", was jedoch nich heißen soll, dass ich stolz drauf bin
grüße
hallo Sorgenkind,
wenn man keinen beispielcode kennt schreibt man einen oder?
Nein. Was ich mir selber schreibe, ist in der Regel nicht mit den "Fehlern" versehen, nach denen gerade gefragt wurde.
ich mein wenn man ein problem lösen will, und nich weiß, wie man überhaupt rangehen kann, dann gibt es auch keinen beispielcode
(ich weiß jetz nich mehr, ob er geschrieben hatte, ob es bereits ansätze gibt, jedoch sollte das doch im endeffekt egal sein)
du hättest ganz leicht nachlesen können, sein posting ist ja noch vorhanden. Und es ist "im Endeffekt" absolut nicht egal.
Wenn man ein Problem lösen will, setzt man sich erstmal auf den Hosenboden und produziert eine Menge (fehlerhaften) Code. Erst wenn man damit nicht weiterkommt, fragt man hier nach
- der benutzte Browser das HTML-Dokument von oben nach unten liest|
tut er denn das nich?
Das tut nicht _jeder_ Browser, aber das ist auch abhängig davon, welches Dokument du ihm zu lesen gibst
dann hätten schon so einige seiten von mirnicht funktioniert (HÄTTEN)
In welchen Browsern hast du denn deine Seiten überprüft? Und hast du sie mal vom Validator gegenprüfen lassen?
- die Javascript-Anweisung erst "spät" gelesen wird
jep, am besten am schluss, nach </body>, wenns geht
Was immer eine sehr problematische Lösung ist. Nein, an _diese_ Stelle gehört nix mehr hin, _nach_ </body> ist das HTML-Dokument zu Ende, Schluß. Das Eleganteste ist ohnehin, Javascript-Sode in ein externes Script (JS-Datei) auszulagern. Und was soll passieren, wenn jemand auf die Seite mit einem Browser geht, der kein Javascript kann oder in dem es abgeschaltet ist?
oder die internetverbindung so langsam ist / ausgelastet ist, dass das timeout des browsers erreicht ist, und somit die grafik nicht geladen wurde
Provider wechseln, DSL-Anschluß besorgen ;-)
PS: du solltest dir doch mal anschauen, _wie_ hier Zitate aus vorangegangenen postings eingebaut werden sollen
werde ich machen ..... bin ich so schlimm?
Ja, bist du
da hab ich noch nie reingeschaut
pfui, schäm dich, und geh sofort mal dahin
PS: hab nich umsonst den präfix "Sorgenkind"
Es heißt nicht "den" Präfix, sondern "das" Präfix - ja, was haste denn in deinen 13 Schuljahren bisher gelernt ?
Grüße aus Berlin
Christoph S.
hallo Sorgenkind,
rehi
Nein. Was ich mir selber schreibe, ist in der Regel nicht mit den "Fehlern" versehen, nach denen gerade gefragt wurde.
Wenn man ein Problem lösen will, setzt man sich erstmal auf den Hosenboden und produziert eine Menge (fehlerhaften) Code. Erst wenn man damit nicht weiterkommt, fragt man hier nach
wie gesagt, wenn man keine ahnung hat, wie man es angehen soll, kann man auch keinen code mit fehlern schreiben
In welchen Browsern hast du denn deine Seiten überprüft? Und hast du sie mal vom Validator gegenprüfen lassen?
IE ab 4, netscape, die alten versionen
nein
Provider wechseln, DSL-Anschluß besorgen ;-)
ich hätt ja auch so gerne DSL, aber das is in meinem kaff noch nichmal in planung *heul*
siehst, was sollte ich zum beispiel machen? mir skydsl holen oder wie?
was wenn ich kein geld habe?
du bist gut ..........
hab mal in die FAQ reingeschaut .......... nix was ich schon vorher wusste, jedoch versuche ich mich mehr dran zu halten
gruß
hallo Sorgenkind,
rehi
Hallo ihr zwei,
war spät gestern, gell ;-)
Also, wie Alexander bereits schrieb, ist es ohne Probleme möglich festzustellen, ob eine Seite vollständig geladen wurde.
<body onload="alert('fertisch!');">
....
</body>
oder
<script ...>
window.onload = function() {alert('fertisch!');};
</script>
Struppi.
Moin Moin !
<body onload="h();return true;">
Alexander
Christoph und Mech: Was habt Ihr geraucht ? Müßt Ihr selbst bei solchen kleinen Fragen erstmal jedes einzelne Atom des Universums in Frage stellen und darüber stundenlang diskutieren ? Oder sind das noch Nachwirkungen vom "localhost vs IP vs DNS"-Thread ?
hi,
<body onload="h();return true;">
leider kann ich Dir nicht zustimmen. Damit stellst Du lediglich fest, das der Code geladen wurde. Ob Bilder geladen wurden stellst Du entweder mit img.complete() oder per onload im img-tag, womit sich flags setzen lassen (analog onload fuer image-object: img.onload = tu_was;). Insgesamt nicht ganz einfach, da Browser unterschiedlich reagieren, falls z. B. Bild nicht vorhanden etc. Vor allem "complete()" liefert da afaik nicht immer zuverlaessige Ergebnisse.
Die Ueberpruefung, ob eine Seite komplett _aufgebaut_ ist, ist also keineswegs so trivial.
Btw: wozu dient hier "return true" im onload-handler?
Gruesse Joachim
hi,
<body onload="h();return true;">
leider kann ich Dir nicht zustimmen. Damit stellst Du lediglich fest, das der Code geladen wurde. Ob Bilder geladen wurden stellst Du entweder mit
Das stimmt nicht. probier es aus. Du kannst soviel Bilder wie du willst in den Code packen und wirst von allen die größe herausbekommen.
img.complete() oder per onload im img-tag, womit sich flags setzen lassen (analog onload fuer image-object: img.onload = tu_was;). Insgesamt nicht ganz
Stimmt auch nicht. onload hat nichts mit einem Flag zu tun, sondern der event wird gefeuert, wenn das Bild fertig geladen ist und das in allen Browsern gleich (nur Opera 6 macht Probleme bei per Javascript generierten Grafiken).
einfach, da Browser unterschiedlich reagieren, falls z. B. Bild nicht vorhanden etc. Vor allem "complete()" liefert da afaik nicht immer zuverlaessige Ergebnisse.
Das allerdings stimmt.
Die Ueberpruefung, ob eine Seite komplett _aufgebaut_ ist, ist also keineswegs so trivial.
Doch window.onload ist zuverlässig.
Btw: wozu dient hier "return true" im onload-handler?
Das ist hier tatsächlich überflüssig. Normalerweise soll dies verhindern, das der standard event ausgeführt wird. Da es hier aber keinen gibt ist es nicht nötig, aber auch nicht falsch.
Struppi.
hi,
Das stimmt nicht. probier es aus. Du kannst soviel Bilder wie du willst in den Code packen und wirst von allen die größe herausbekommen.
mag sein. Dennoch feuert body onload frueher, als ein script, dass alle img-onloads auswertet - zumindestens, wenn man reale Ladebedingungen hat. Muss mir doch mal wieder ein Test bauen...
onload hat nichts mit einem Flag zu tun, sondern der event wird gefeuert, wenn das Bild fertig geladen ist
Verstehe Deinen Einwand nicht. Da Bilder in nicht vorhersehbare Reihenfolge geladen werden, setze ich - wenn img.onload feuert - ein flag. Die flags werden solange ueberprueft, bis alle gesetzt sind.
Doch window.onload ist zuverlässig.
Das glaube ich erst, wenn ich es auf verschiedenen Konfigs getested habe. Diskussionen in dcljs wie diese: http://groups.google.de/groups?hl=de&lr=lang_de&ie=UTF-8&oe=UTF-8&threadm=3CBECAB9.7020307%40vnett.de&rnum=1&prev=/groups%3Fq%3D%2B%2522window%2Bonload%2522%26hl%3Dde%26lr%3Dlang_de%26ie%3DUTF-8%26oe%3DUTF-8%26selm%3D3CBECAB9.7020307%2540vnett.de%26rnum%3D1 sprechen da auch eine andere Sprache. Ausserdem bezweifle ich, dass sich alle Browser gleich verhalten, wenn es zu Ladezeitverzoegerungen/unterbrechungen kommt, oder ein Bild gar nicht vorhanden ist.
Gruesse Joachim
onload hat nichts mit einem Flag zu tun, sondern der event wird gefeuert, wenn das Bild fertig geladen ist
Verstehe Deinen Einwand nicht. Da Bilder in nicht vorhersehbare Reihenfolge geladen werden, setze ich - wenn img.onload feuert - ein flag. Die flags werden solange ueberprueft, bis alle gesetzt sind.
sorry, hatte ich falsch gelesen.
Doch window.onload ist zuverlässig.
Das glaube ich erst, wenn ich es auf verschiedenen Konfigs getested habe. Diskussionen in dcljs wie diese: http://groups.google.de/groups?hl=de&lr=lang_de&ie=UTF-8&oe=UTF-8&threadm=3CBECAB9.7020307%40vnett.de&rnum=1&prev=/groups%3Fq%3D%2B%2522window%2Bonload%2522%26hl%3Dde%26lr%3Dlang_de%26ie%3DUTF-8%26oe%3DUTF-8%26selm%3D3CBECAB9.7020307%2540vnett.de%26rnum%3D1 sprechen da auch eine andere Sprache. Ausserdem bezweifle ich, dass sich alle Browser gleich verhalten, wenn es zu Ladezeitverzoegerungen/unterbrechungen kommt, oder ein Bild gar nicht vorhanden ist.
Leider stürzt bei mir der Browser ab, da google leider nicht perfekt ist und irgendwelche seltsamen Kodierungen und keinen Doctype da reinpackt, so dass ich deren NG-Archiv nicht einsehen kann.
Aber, die Browser arbeiten schon vorhersehbar.
Ladezeitverzoegerungen/unterbrechungen -> Timeout -> Image.onerror -> body.onload
Bild nicht vorhanden -> Image.onerror -> body.onload
Struppi.