Dom chargé l'événement cross borwser native javascript code

Je travaille sans le framework javascript, mais je veux appeler une fonction juste quand le DOM est chargé.

Je ne peux / ne veux pas utiliser l'attribut 'onload' sur la balise <body>.

Voici le code:

  • Dans les navigateurs non IE, utilisez l'événement DOMContentLoaded
  • Dans IE top frame, utilisez scroll hack (voir _readyIEtop)
  • Dans le cadre IE, utilisez simplement onload

    var onready = function(handler) { // window is loaded already - just run the handler if(document && document.readyState==="complete") return handler(); // non-IE: DOMContentLoaded event if(window.addEventListener) window.addEventListener("DOMContentLoaded",handler,false); // IE top frame: use scroll hack else if(window.attachEvent && window==window.top) { if(_readyQueue.push(handler)==1) _readyIEtop(); } // IE frame: use onload else if(window.attachEvent) window.attachEvent("onload",handler); }; // IE stuff var _readyQueue = []; var _readyIEtop = function() { try { document.documentElement.doScroll("left"); var fn; while((fn=_readyQueue.shift())!=undefined) fn(); } catch(err) { setTimeout(_readyIEtop,50); } }; 

JQuery écoute l'IE un peu plus (beaucoup de code), mais dans mes tests, il fonctionne juste avant l'événement Onload de toute façon.

 var test = function() { alert("ok"); } onready(test); 

Je pense que http://code.google.com/p/domready/ est exactement ce que vous recherchez.

Si vous avez déjà écrit votre propre fichier JavaScript qui ne peut pas dépendre des bibliothèques existantes et que vous souhaitez exécuter uniquement après la chargement de la page, cette bibliothèque est pour vous.

Faites simplement ceci:

 <html lang="en"> <head> <script src="domready.js" type="application/javascript"></script> <script type="application/javascript"> DomReady.ready(function() { alert('dom is ready'); }); </script> </head> <body> </body> </html> 

Eh bien, je crains que le navigateur croisé et le DOM chargé ne se rejoignent pas facilement. Par recommandation, Ryan Morr's ondomready (https://github.com/ryanmorr/ondomready), mais il existe une tonne d'alternatives.

J'ai écrit ceci pour cela:

 ;(function(window) { "use strict"; var document = window.document; function Ready(fn) { function test() { if (document.readyState !== "complete") { return setTimeout(test, 100); } fn.call(document); } test(); } window.Ready = Ready; })(window); 

Vous venez de passer une callback function qui s'exécute lorsque le dom est prêt.

 Ready(function() { console.log(this) // document }); 

Vous pouvez le consulter sur GitHub .

J'espère que cela vous aidera, bon courage.