Ich schreibe kürzlich ein Javascript-Framework und habe gerade das DOMContentLoaded-Ereignis gekapselt. Mit etwas Aufregung habe ich mir Notizen zu den Prinzipien und Kompatibilitätsproblemen gemacht, die während des Entwicklungsprozesses aufgetreten sind, um nicht zu vergessen, überall danach zu suchen .
Wenn wir JS-Code schreiben, fügen wir normalerweise das Ereignis window.onload hinzu, hauptsächlich damit wir nach dem Laden des DOM getElementById, getElementsByTagName und andere Methoden verwenden können, um DOM-Elemente für den Betrieb auszuwählen, aber window.load wartet bis Skripte, CSS und alle Ressourcen im Iframe werden erst dann ausgelöst, wenn das endgültige Bild oder sogar der Iframe geladen ist Das Laden des letzten Bildes vor der Ausführung von js ist sehr zeitaufwändig und beeinträchtigt oft die Benutzererfahrung.
Viele js-Frameworks verfügen über eine document.ready-Funktion, wie z. B. die $(document).ready()-Methode von JQuery, die den js-Code unmittelbar nach dem Laden des DOM ausführen und das Bild langsam laden kann.
Der Kern von document.ready ist das DOMContentLoaded-Ereignis. Firefox, Chrome, Opera, Safari und ie9 können alle addEventListener('DOMContentLoaded',fn,false) für die Ereignisbindung verwenden, aber ie6~8 unterstützt DOMContentLoaded nicht Ereignis, daher müssen Sie eine Kompatibilitätsverarbeitung für ie6~8 durchführen.
Den Informationen zufolge kann ie6~8 das document.onreadystatechange-Ereignis verwenden, um zu überwachen, ob der document.readyState-Status gleich „abgeschlossen“ ist, um festzustellen, ob das DOM geladen wurde document.readyState von ie6~8 wartet, bis der Iframe erst dann vollständig ist, wenn alle Ressourcen geladen sind. Nach dem Testen wird jedoch, selbst wenn auf der Seite kein Iframe vorhanden ist, tatsächlich das Onload-Ereignis anstelle des DOMContentLoaded-Ereignisses ausgelöst.
Glücklicherweise verfügt der IE über eine einzigartige doScroll-Methode. Wenn das Seiten-DOM nicht geladen wurde, wird beim Aufruf der doScroll-Methode ein Fehler gemeldet. Im Gegenteil, solange doScroll in Abständen aufgerufen wird, wird kein Fehler gemeldet Dies bedeutet, dass das Seiten-DOM geladen wurde. Diese Methode ist unabhängig davon gültig, ob der Inhalt im Bild und im Iframe geladen wurde.
Wenn mehrere js-Dateien an das document.ready-Ereignis gebunden sind, kann zur Lösung des Problems ein Ereigniswarteschlangenmechanismus eingeführt werden, um zu verhindern, dass der Browser wiederholt bindet und sie ordnungsgemäß ausführt.
Das Obige ist das Prinzip und die Kompatibilitätsprobleme des document.ready-Ereignisses. Um das Verständnis des Ausführungsprozesses zu erleichtern, wird der Ausführungsprozess in Kommentaren verwendet Irgendetwas stimmt nicht, bitte geben Sie Ratschläge.