Gibt es eine definitive JavaScript-Methode, um zu prüfen, ob eine Webseite vollständig geladen wurde? Komplett, also 100% komplett. HTML, Skripte, CSS, Bilder, Plugins, AJAX, alles!
Da Benutzerinteraktion AJAX beeinflussen kann, nehmen wir an, dass abgesehen von der anfänglichen Seitenanforderung keine weitere Benutzerinteraktion mit der Seite stattfindet.
Was du verlangst, ist ziemlich unmöglich. Es gibt keine Möglichkeit festzustellen, ob alles vollständig geladen ist. Hier ist warum:
onload
(oder DOMReady
) ausgelöst wird. Dadurch wird die Methode onload
verwenden verwendet, um festzustellen, ob die Seite geladen wurde. window.XMLHttpRequest
ausgeführt hat, aber Sie konnten immer noch nicht feststellen, ob Plugins wie Flash noch geladen wurden oder nicht. Der einzige Weg, um sicher zu sein, dass alles geladen ist jedes einzelne Stück Code auf der Seite, die etwas lädt Ihren Code sagen, dass es fertig ist, sobald es geladen wird.
Eine hackige, unvollständige Lösung: Sie könnten versuchen, XMLHttpRequest
mit einer Funktion zu überschreiben, die das vorhandene XMLHttpRequest
umschließt und zurückgibt. Dadurch können Sie feststellen, ob gerade ein AJAX-Ereignis stattfindet. Diese Lösung funktioniert jedoch nicht, um zu sehen, ob Plugins geladen sind, und Sie könnten den Unterschied zwischen AJAX-Ereignissen, die beim Laden der Seite ausgelöst werden, und AJAX-Anfragen, die sich periodisch ändern, wie die Änderungen am Stack Overflow, nicht unterscheiden das Stack Exchange-Symbol oben links, wenn Sie neue Benachrichtigungen haben.
Versuchen Sie etwas wie folgt:
%Vor%Grundsätzlich beantworten ADW und Keith die Frage, aber ich würde vorschlagen, window.onload nicht zu verwenden, aber:
%Vor% Wenn Sie eine Kombination aus window.onload
, document.readyState
und Callbacks für AJAX-Anfragen verwenden, sollten Sie in der Lage sein zu tun, was Sie wollen. Stellen Sie einfach sicher, dass das Fenster geladen ist, das DOM zur Manipulation bereit ist und verfolgen Sie die AJAX-Anfragen.
Insbesondere für AJAX, abhängig von der Anzahl der von Ihnen gestellten Anforderungen: Erhöhen Sie bei jeder Anforderung eine Variable, und wenn die Variable ===
die Gesamtanzahl der Anfragen auslöst, führen Sie eine Funktion aus. Wenn Sie die Anzahl der AJAX-Anfragen nicht kennen, aber wissen, welche die letzten wären, lassen Sie einfach eine Callback-Funktion auslösen, wenn sie fertig ist.
Wenn alles gesetzt und wahr ist, feuern Sie eine letzte Funktion ab, um das zu tun, was Sie wollen, in dem Wissen, dass alles geladen werden sollte.
In Bezug auf Flash- und Silverlight-Anwendungen (nicht sicher, ob window.onload
oder document.ready
diese verfolgt) könnten Sie auch die Menge der mit der Anwendung geladenen Daten aufzeichnen, und wenn die geladenen Daten ===
die Summe Daten, lassen Sie die Anwendung eine Funktion auslösen oder eine Variable auf die Seite erhöhen.
Hier ist die nicht aufdringliche js-Funktion, die ich geschrieben habe, unter Verwendung von Ereignissen beim Laden. In diesem Fall feuere ich Ereignisse auf js-Skript, da dies meine js-Autoloader-Funktion ist, aber Sie können einfach Ereignisse auf anderen Elementen hinzufügen, die dasselbe Prinzip verwenden. Vorausgesetzt, dieses Script kümmert sich um js-Skripte, die in einem dedizierten Tag div geladen sind.
%Vor%Mit freundlicher Genehmigung: Kleinster DOMReady-Code, je - Dustin Diaz
Update: Und für IE
%Vor% P.S: window.onload
ist eine ganz andere Sache
Tags und Links javascript load