/ / Ist die jQuery $ (window) .load (); Ereignis wird nicht auf Seiten ohne eine <! DOCTYPE> -Deklaration ausgelöst? (… In einem Chrome-Erweiterungs-Inhaltsskript) - Javascript, JQuery, Ereignisse, Google Chrome-Erweiterung, Doctype

Ist die jQuery $ (window) .load (); Ereignis nicht auf Seiten ohne <! DOCTYPE> -Deklaration ausgelöst? (... in einem Chrom-Erweiterung Inhalt Skript) - Javascript, jquery, Ereignisse, Google-Chrome-Erweiterung, Doctype

Ich arbeite an einer Google Chrome-Erweiterung, mit der eine Webseite bearbeitet wird, die jedoch entweder teilweise (im DOM) oder vollständig (mit Bildern) geladen ist.

Es scheint, dass heutzutage viele Websites das verwenden

<!DOCTYPE html>

Deklaration oder eine Variation davon, aber viele andere nicht. Die Frage bezieht sich hauptsächlich auf HTML - Doktypen ... Ich bin mir bei den anderen nicht sicher.

Ist es sicher anzunehmen, dass wenn eine Webseite nicht die DOCTYPE-Deklaration hat, dann $ (window) .load (); wird nicht gefeuert?

Am Anfang habe ich $ (document) .ready () verwendet; (für den Fall, dass das DOM geladen ist), aber später zu $ ​​(window) .load () gewechselt ist; (um die Bilder auch laden zu lassen).

Das Ding ist jetzt $ (window) .load (); scheint nicht zu funktionieren, wenn es keinen DOCTYPE gibt. $ (document) .ready (); scheint auf allen Seiten zu funktionieren, unabhängig davon, ob ein DOCTYPE deklariert ist oder nicht.

Möglicherweise kann dies für andere Personen mit demselben Problem hilfreich sein. Ich habe ein bisschen gesucht und keine entscheidende Antwort gefunden. Es scheint, dass ich am Ende so etwas verwenden werde:

if (window.document.doctype != null) {$(window).load(checkEntries);}
if (window.document.doctype == null) {$(document).ready(checkEntries);}

Ich denke, meine Frage ist ... Ist es normal, nach dem DOCTYPE suchen zu müssen, um zu wissen, welches Ereignis verwendet werden soll? Oder fehle ich hier etwas?

Grundsätzlich, warum tut $ (window) .load (); scheinen nicht zu feuern, wenn es keine DOCTYPE-Deklaration gibt?

Antworten:

6 für die Antwort № 1

Grundsätzlich sollten Sie $ (window) nicht verwenden.load (), da es nicht vollständig unterstützt wird. Wenn Sie es wirklich brauchen, ist Ihre obige Lösung die beste, die Sie tun können. Die jQuery-Seite fasst die Vorbehalte gut zusammen:

Vorbehalte des Ladeereignisses bei Verwendung mit Bildern

Eine häufige Herausforderung, die Entwickler zu lösen versuchenmit der .load () Kurzbefehl ist die Ausführung einer Funktion, wenn ein Bild (oder eine Sammlung von bilder) vollständig geladen haben. Es sind mehrere Vorbehalte mit bekannt dies sollte beachtet werden. Diese sind:

  • Es funktioniert weder konsistent noch zuverlässig browserübergreifend
  • Es wird in WebKit nicht korrekt ausgelöst, wenn die Bildquelle auf dieselbe Quelle wie zuvor eingestellt ist
  • Es sprudelt nicht richtig in den DOM - Baum
  • Kann für Bilder, die sich bereits im Cache des Browsers befinden, aufhören zu feuern

URL: http://api.jquery.com/load-event/


3 für die Antwort № 2

Das .ready() Methode ist in der Regel nicht kompatibel mit der <body onload=""> Attribut. Wenn load verwendet werden muss, verwenden Sie entweder nicht .ready () oder jQuery "s .load() Methode zum Anhängen von Ladeereignishandlern an das Fenster oder an spezifischere Elemente, z. B. Bilder.