9

Ist es möglich, Unterstützung für das Ereignis DOMContentLoaded zu erkennen?Feature erkennen Unterstützung für DOMContentLoaded-Ereignis

Methode ist wie Kangax Lösung hier nicht, da DOMContentLoaded als Eigenschaft eines Elements nicht ausgesetzt ist: Detecting event support without browser sniffing

+0

Ein Tauchgang in etwas wie die jQuery-Quelle sollte informativ sein. – Pointy

+0

Warum keine Kompatibilitätstabelle verwenden? – Mics

+0

@Mics Ursache das ist Browser-Erkennung nicht Feature-Erkennung. –

Antwort

3

Just listen für alle drei Veranstaltungen und die erste ausgelöst gewinnt. Wenn der Gewinner DOMContentLoaded ist, wird es unterstützt. Wenn es zu dem Zeitpunkt nicht ausgelöst wurde, an dem eines der beiden anderen ausgelöst wurde, wird es nicht unterstützt.

<script> 
    var hasDOMContentLoaded = false, 
     ready = false, 
     readyMethod = null; 

    // Listen for "DOMContentLoaded" 
    document.addEventListener("DOMContentLoaded", function(event) { 
     hasDOMContentLoaded = true; 
     init("DOMContentLoaded"); 
    }); 

    // Listen for "onreadystatechange" 
    document.onreadystatechange = function() { init("onreadystatechange"); } 

    // Listen for "load" 
    document.addEventListener("load", function(event) { init("load"); }); 

    // Gets called after any one of the above is triggered. 
    function init(method) { 
     if(!ready) { 
      ready = true; 
      readyMethod = method; 
      go(); 
     } 
    } 

    // Page is ready, time is up. 
    // Eitehr DOMContentLoaded has been triggered or it never will. 
    function go() { 
     console.log("hasDOMContentLoaded: ", hasDOMContentLoaded); 
     // My initialization code here 
    } 

</script> 
1

Eigentlich & Faktisch gibt es keine Notwendigkeit für DOMContentLoaded Ereignis. Jedes Skript kann verwendet werden, um festzustellen, ob das HTML des Dokuments dank des Prinzips der HTML-Stream-Belastung vollständig analysiert wurde.

Alles, was Sie tun müssen, ist die Funktion (Sie würden sonst dem Ereignis DOMContentLoaded zuweisen) direkt vor den schließenden Tags Ihres Dokuments (s).

Es wird ausgeführt, genau nachdem das letzte HTML-Element zu DOM geparst wurde, und es wird etwas schneller und früher als das integrierte DOMContentLoaded ausgeführt wird.

0

Ich fand die folgende Erklärung über usage of the DOMContentLoaded event von der Mozilla-Entwickler-Website sehr nützlich. Am Ende es über abwärtskompatibel Möglichkeiten spricht zu tun dasselbe zu erreichen, die ich hier gewonnen haben (keine Überraschung, es konzentriert sich auf IE) ...

Internet Explorer 8 unterstützt die Readystatechange Ereignis, das sein kann Wird verwendet, um zu erkennen, wann das DOM bereit ist. In früheren Versionen von Internet Explorer kann dieser Status erkannt werden, indem wiederholt versucht wird, document.documentElement.doScroll ("left"); auszuführen, da dieses Snippet einen Fehler wirft, bis das DOM bereit ist.

+0

IE war der erste und einzige UA, der Sie mit dem Status Bereit für Dokument und andere Dokumentelemente ausgestattet hat. Die Werte der Eigenschaft sind: Typ: String> states: * nicht initialisiert * (Objekt wird nicht mit Daten initialisiert.)> * Loading * (Das Objekt lädt seine Daten.)> * Geladen * (Das Objekt hat seine Daten geladen.)> * interaktiv * (Der Benutzer kann mit dem Objekt interagieren, obwohl es nicht vollständig geladen ist.)> * complete * (Das Objekt ist vollständig initialisiert.) Der * interaktive * Status des Dokuments ist ein Vorgänger von DOMContentLoaded und ist in allen verfügbar Versionen von IE seit 1997 oder IE4.0. –

Verwandte Themen