Kód futtatása az összes oldalelem letöltődése előtt
Sokan szembesültek már azzal a problémával, hogy a
Nos, Dean Edwards ismerteti blogjában a megoldást, amit érdemes lépésenként feldolgozni. Először is a
Így a teljes JavaScript kód az online kipróbálható demóból magyarra fordítva a következőképpen fest:
■ window.onload
eseménykezelő segítségével lefuttatott kódjuk túl későn kapott lehetőséget a beavatkozása, és így valamilyen dinamikus elem csak akkor tudott elindulni az oldalon, amikor már minden letöltődött. Ha korábban lefutó kódot szeretnénk, és már a weblap objektum modelljének feldolgozása is elegendő számunkra, akkor Mozilla böngészőkben az DOMContentLoaded
esemény van segítségünkre, de mit tehetünk Internet Explorerben?Nos, Dean Edwards ismerteti blogjában a megoldást, amit érdemes lépésenként feldolgozni. Először is a
<script>
elemeken használható defer
tulajdonság támogatását használja ki, ami pont a DOM objektumok összeállítása utáni betöltésre és végrehajtásra készteti a böngészőt. Ennek működésre bírásához, és más böngészőktől való elrejtéséhez azonban kisebb trükkökhöz kell folyamodni, amelyekhez vagy a feltételes megjegyzéseket vagy a feltételes JavaScript kód végrehajtást tudjuk segítségül hívni. Végül a többi böngésző számára Dean nem készített elő megoldást, így azoknak a szokásos onload
eseménykezelő beállítást adjuk, amelynél azért figyelni kell, hogy a már kezelt böngészők esetén ne fusson le kétszer.Így a teljes JavaScript kód az online kipróbálható demóból magyarra fordítva a következőképpen fest:
<script type="text/javascript">
function init() {
// Ha már meghívták, ne fusson le újra
if (arguments.callee.done) return;
// Most hívják először, jelezzük, hogy ez megtörtént
arguments.callee.done = true;
// Itt lenne az onload esemény kódja
};
// Ez csak Mozilla böngészőkben megy
if (document.addEventListener) {
document.addEventListener("DOMContentLoaded", init, null);
}
// Ezt csak az Internet explorer fogja feldolgozni,
// figyeljük meg, hogy a megjegyzések meddig tartanak!
/*@cc_on @*/
/*@if (@_win32)
document.write("<script defer src=ie_onload.js><"+"/script>");
/*@end @*/
// A többi böngészőnek (az újrahívás védelemmel kerüljük el,
// hogy Mozilla és Internet Explorer esetén is még egyszer lefusson)
window.onload = init;
</script>
progressbar
Gyanítom, hogy nem, mert tudnia kéne mennyi byte töltődött be és mennyinek kell még betöltődnie. Mondjuk az még odagenerélható, hogy mennyi az összméret,aminek be kell töltődnie, de a mennyi van most és menniy van hátra az mérhető-e js-ből?
De megkérdeztem, mert eddig azt is gyanítani véltem, hogy az onload előtt nem nagyon lehet semmise :)
gányolni lehet