9

È possibile rilevare il supporto per l'evento DOMContentLoaded?supporto per rilevamento di elementi per evento DOMContentLoaded

Metodo di come la soluzione di Kangax qui non funzionerà perché DOMContentLoaded non è esposta come una proprietà di ogni elemento: Detecting event support without browser sniffing

+0

Un tuffo in qualcosa come la sorgente jQuery dovrebbe essere informativo. – Pointy

+0

Perché non utilizzare la tabella di compatibilità? – Mics

+0

@Mics Causa che il rilevamento del browser non funzioni di rilevamento. –

risposta

3

solo ascoltare per tutti e tre gli eventi e il primo vince attivato. Se il vincitore è DOMContentLoaded, è supportato. Se non è stato attivato dal momento in cui uno degli altri due è stato attivato, non è supportato.

<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

realtà & Di fatto, non v'è alcuna necessità di DOMContentLoaded Evento. Qualsiasi script può essere utilizzato per determinare se il documento HTML è stato completamente analizzato grazie al principio del caricamento del flusso HTML.

Tutto ciò che dovete fare è mettere la funzione (altrimenti assegnata all'evento DOMContentLoaded) subito prima dei tag di chiusura dei vostri documenti.

Eseguirà esattamente dopo che l'ultimo elemento HTML è stato analizzato su DOM, e verrà eseguito un po 'più veloce e prima del fatto che il DOMContentLoaded integrato funzionerà.

0

Ho trovato la seguente spiegazione su usage of the DOMContentLoaded event dal sito di sviluppatori mozilla molto utile. Alla fine si parla di modi retrocompatibile da fare ottenere la stessa cosa, che ho qui estratte (nessuna sorpresa si concentra su IE) ...

Internet Explorer 8 supporta l'evento ReadyStateChange, che può essere usato per rilevare quando il DOM è pronto. Nelle versioni precedenti di Internet Explorer , questo stato può essere rilevato provando ripetutamente a eseguire document.documentElement.doScroll ("left") ;, poiché questo snippet genera un errore finché il DOM non è pronto.

+0

IE è stato il primo e unico UA ad aver fornito lo stato pronto del documento e altri elementi del documento i cui valori di Proprietà sono: Tipo: Stringa> stati: * non inizializzato * (l'oggetto non è inizializzato con i dati.)> * Caricamento * (L'oggetto sta caricando i suoi dati.)> * Loaded * (L'oggetto ha finito di caricare i suoi dati.)> * interactive * (L'utente può interagire con l'oggetto anche se non è completamente caricato.)> * complete * (L'oggetto è completamente inizializzato.) Lo stato * interattivo * del documento è un predecessore di DOMContentLoaded ed è disponibile in tutto versioni di IE dal 1997 o IE4.0. –

Problemi correlati