Après avoir parcouru le Net pour un évènement DOMContentLoaded
(qui s’enclenche avant window.onload
) qui puisse fonctionner sur tous les navigateurs (et en particulier IE7), j’ai pu trouver un article qui explique bien les différentes étapes et la solution adaptée : http://javascript.info/tutorial/onload-ondomcontentloaded
Pour résumer la fonction à utiliser est :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | function bindReady(handler){ var called = false function ready() { if (called) return called = true handler() } if ( document.addEventListener ) { // native event document.addEventListener( "DOMContentLoaded" , ready, false ) } else if ( document.attachEvent ) { // IE try { var isFrame = window.frameElement != null } catch (e) {} // IE, the document is not inside a frame if ( document.documentElement.doScroll && !isFrame ) { function tryScroll(){ if (called) return try { document.documentElement.doScroll( "left" ) ready() } catch (e) { setTimeout(tryScroll, 10) } } tryScroll() } // IE, the document is inside a frame document.attachEvent( "onreadystatechange" , function (){ if ( document.readyState === "complete" ) { ready() } }) } // Old browsers if (window.addEventListener) window.addEventListener( 'load' , ready, false ) else if (window.attachEvent) window.attachEvent( 'onload' , ready) else { var fn = window.onload // very old browser, copy old onload window.onload = function () { // replace by new onload and call the old one fn && fn() ready() } } } |
A partir de là vous pouvez appeler votre fonction avec :
1 2 3 | bindReady( function () { /* quelque chose qui doit se lancer après le chargement du DOM */ }); |
Dans le cas où vous voudriez appeler plusieurs fonctions, alors vous pouvez simplement faire quelque chose comme :
1 2 3 4 5 6 7 8 9 10 11 12 | var fonctionsACharger=[]; bindReady( function () { for ( var i=0; i<functionsACharger.length;i++) functionsACharger[i](); }); /* on ajoute les fonctions à charger dans notre tableau */ fonctionsACharger.push( function () { /* première chose à faire */ }); fonctionsACharger.push( function () { alert( "Toutes les fonctions sont maintenant chargées !" ); }); |