0

Sagen, ich habe die folgenden zwei Script-Tags irgendwo auf meiner Seite:Erzwingen DOMContentLoaded Ereignis auf Fenster vor jQuery Dokument bereit

<script> 
    window.addEventListener("DOMContentLoaded", 
     function() 
     { 
      console.log("DOM loaded"); 
     } 
    ); 
</script> 
... 
<script> 
    $(document).ready(
     function() 
     { 
      console.log("Document ready"); 
     } 
    ); 
</script> 

Gibt es eine einfache Art und Weise, dass das vor $().ready DOMContentLoaded-Ereignisse ausgelöst zu erzwingen?

Dies ist ein vereinfachtes Beispiel für mein tatsächliches Problem. Das wirkliche Problem, dem ich gegenüberstehe, ist, dass das DOMContentLoaded-Ereignis in einer Bibliothek eines Drittanbieters registriert ist, die ich am Ende des Rumpfs meiner Seite einschließe, und ich habe viel zu viele Anrufe, um sie alle schnell zu ändern. Ich könnte theoretisch window.addEventListener zu document.addEventListener ohne irgendwelche Probleme zu erstellen, aber weil ich jQuery in meinem Kopf der Seite einschließen, alle $().ready Aufrufe noch vor document.addEventListener("DOMContentLoaded"...), wie here beschrieben, und ich kann nicht vernünftigerweise bewegen die Include-Position von jQuery oder diese Drittanbieter-Bibliothek. Ich möchte auch vermeiden, Änderungen an der Third-Party-Bibliothek, wenn möglich.

Antwort

1

können Sie $.holdReady()

<script> 
    $.holdReady(true); 
    window.addEventListener("DOMContentLoaded", function() { 
     console.log("DOM loaded"); 
     $.holdReady(false); 
    }); 
</script> 
... 
<script> 
    $(document).ready(function() { 
     console.log("Document ready"); 
    }); 
</script> 
+0

verwenden Wenn jQuery nicht aufgenommen werden könnte, wäre es ausreichend, beide 'holdReady' ruft zu umgeben in' if (typeof $()! = 'Undefined') '? –

+0

@JimmyP _ "Wenn jQuery nicht enthalten sein könnte" _ Nicht sicher, was du meinst? Ist die Prämisse von '' ready() '' '' '' '' '' '' '' '' 'DOMContentLoaded' 'Ereignis nicht aufgerufen? – guest271314

+0

Ja, tut mir leid. Das war die ursprüngliche Frage, aber jetzt bin ich neugierig; Wenn eine meiner Seiten diese Bibliothek von Drittanbietern enthält, die das Ereignis "DOMContentLoaded" registriert, während jQuery nicht auf der Seite vorhanden ist, wird ein undefinierter Fehler ausgelöst. –

Verwandte Themen