2009-10-06 16 views
5

IE a l'attribut readyState dans l'objet document, qui indique l'état actuel, par ex. "loading", "complete" etc.document.readyState analogique pour les navigateurs gecko

Est-il possible de trouver l'état de chargement actuel du document dans les navigateurs basés sur Mozilla? Je suis conscient de l'événement DOMContentLoaded, mais cela ne correspond pas à ma situation, car mon code peut être exécuté après le déclenchement de cet événement.

Ajouté: non, je ne peux pas utiliser de cadre, et ne pas confondre avec l'attribut .readyState de l'objet XHR. Et c'est un bookmarklet, donc il peut être inséré à n'importe quelle étape de chargement.

Ajouté plus tard: De toute façon, il semble que ce ne soit pas un gros problème pour moi. Parce que cet attribut will be added in FF3.6, et il ne casse pas les choses mal dans Firefox, lorsque vous manipulez sur DOM inachevé (unlike IE).

+0

à la fin de votre contenu

2

Peut être exécuté? Juste être averti de l'événement DOM et stocker son état. Je ne vois pas quel est votre problème racine. Vous pouvez sûrement déchirer les tripes de cette méthode et l'adapter à votre situation.

façon de jQuery de le faire:

// Mozilla, Opera and webkit nightlies currently support this event 
if (document.addEventListener) { 
    // Use the handy event callback 
    document.addEventListener("DOMContentLoaded", function(){ 
       //do stuff 
    }, false); 

// If IE event model is used 
} else if (document.attachEvent) { 
    // ensure firing before onload, 
    // maybe late but safe also for iframes 
    document.attachEvent("onreadystatechange", function(){ 
     if (document.readyState === "complete") { 
      document.detachEvent("onreadystatechange", arguments.callee); 
      jQuery.ready(); 
     } 
    }); 

    // If IE and not an iframe 
    // continually check to see if the document is ready 
    if (document.documentElement.doScroll && window == window.top) (function(){ 
     if (jQuery.isReady) return; 

     try { 
      // If IE is used, use the trick by Diego Perini 
      // http://javascript.nwbox.com/IEContentLoaded/ 
      document.documentElement.doScroll("left"); 
     } catch(error) { 
      setTimeout(arguments.callee, 0); 
      return; 
     } 

     // and execute any waiting functions 
     jQuery.ready(); 
    })(); 
} 

// A fallback to window.onload, that will always work 
jQuery.event.add(window, "load", jQuery.ready); 
+0

Ce code ne peut pas détecter si le document est chargé s'il est lui-même inclus après le chargement du document (par exemple bookmarklet, inclusion dynamique