Ich möchte ein wenig Javascript ausführen, bevor die ganze Seite geladen wurde. Ist das möglich? Oder beginnt der Code unter </html>
?Kann ich Javascript ausführen, bevor die ganze Seite geladen ist?
Antwort
Nicht nur können Sie, aber Sie müssen besondere Anstrengungen machen nicht zu, wenn Sie nicht wollen. :-)
Wenn der Browser beim Analysieren des HTML-Codes auf einen script
-Tag stößt, hört er auf zu analysieren und übergibt den Javascript-Interpreter, der das Skript ausführt. Erst wenn das Skript abgeschlossen ist, führt der Browser die Analyse der Seite fort (weil das Skript möglicherweise document.write
Aufrufe ausführt, um Markup auszugeben, das der Parser verarbeiten sollte). Dies ist das Standardverhalten. Es gibt script
Tag-Attribute, die dies verhindern können (defer
and async
).
dies so betrachten:
<!DOCTYPE HTML>
<html><head><!-- yada yada yada --></head>
<body>
<p>Line 1</p>
<script type='text/javascript'>
alert("Stop that parsing!");
</script>
<p>Line two</p>
</body>
</html>
Wenn Sie die Seite laden, werden Sie den „Linie 1“ Absatz sehen, während die Warnung angezeigt wird, und die der „Linie 2“ Absatz erscheint, nachdem es fertig ist.
Wo es etwas knifflig wird, ist die Interaktion mit dem DOM, da das DOM vom Parser aufgebaut wird, da es seine Sache macht und Ihr Skript läuft, bevor das DOM komplett manipulierbar ist. Wenn Sie nur auf Elemente zugreifen, die dem Tag script
in der Datei vorangestellt sind, sind Sie in Ordnung, aber um sicher zu gehen, sollten Sie alle DOM-Interaktionen verschieben, bis das DOM vollständig erstellt ist.
Aber in den meisten Fällen können Sie glücklich auf die früheren Elemente zugreifen. Bedenken Sie:
<!DOCTYPE HTML>
<html><head><!-- yada yada yada --></head>
<body>
<p id='p1'>Line 1</p>
<script type='text/javascript'>
document.write("<p>p1 is null? " + (document.getElementById('p1') == null ? "yes" : "no") + "</p>");
document.write("<p>p2 is null? " + (document.getElementById('p2') == null ? "yes" : "no") + "</p>");
</script>
<p id='p2'>Line two</p>
</body>
</html>
Der Ausgang Sie sehen, ist:
Line 1 p1 is null? false p2 is null? true Line 2
... weil p1
existiert, ab wann das Skript ausgeführt wird, aber p2
nicht.
Ich habe keinen Link zur Hand hat, aberIn this message, die Entwickler des Google Closure Library sagen, dass sie keinen großen Wert auf die „ready“ Stil Ereignisse nicht sehen, dass Prototype, jQuery, ExtJS, Dojo und die meisten anderen bieten, denn wenn Sie das Skript nach den Elementen einfügen, mit denen Sie interagieren möchten, geht es Ihnen gut. was im Einklang mit YUI's recommendation, dass Sie nur Ihre Skripte direkt vor dem schließenden </html>
Tag (da müssen Sie sie irgendwo schließlich, und dort unten halten sie nicht halten Sie Ihre Seite anzuzeigen). Nun, persönlich, ich sehe in diesen Ereignissen einen gewissen Wert, obwohl ich denke, dass sie überbeansprucht sind, aber mein Punkt ist, dass Sie ganz klar anfangen können, sehr früh mit den Dingen zu interagieren.
Große Antwort. Vielen Dank. – picknick
Oder Sie können die Ereignisdelegierung verwenden und Ihre Handler einrichten, bevor die Seite geladen wurde, um eine reaktionsfähigere Oberfläche zu erhalten. Hier ist ein schöner Artikel darüber: [Lassen Sie sich nicht von jQuery $ (document) .ready() verlangsamen] (http://encosia.com/2010/08/18/dont-let-jquerys-document-ready -slow-you-down /) – Tgr
Kann man mit Javascript einen Wert ersetzen (zB "Line 1" in "Hallo Welt" ändern), bevor der Browser p1 rendert? Was ich damit sagen will, ist, dass ich nicht möchte, dass der Bildschirm flackert, wenn ich den Wert von p1 ersetze. Ich möchte den Wert/den Text von p1 durch Javascript ersetzen, bevor der Benutzer sogar p1 (und p2 und andere Elemente) sehen kann. Ist das möglich? – n00b
Ich denke, Sie erhalten einen Fehler, wenn Sie versuchen, auf ein Steuerelement im BODY verweisen, bevor die ganze Seite geladen wird.
Sie können Javascript jederzeit ausführen. AFAIK es wird in dem Moment ausgeführt, in dem der Browser das <Skript> Tag erreicht, wo es ist. Aber Sie können nicht auf Elemente zugreifen, die noch nicht geladen sind.
Wenn Sie also auf Elemente zugreifen müssen, sollten Sie warten, bis das DOM geladen ist (das bedeutet nicht, dass die ganze Seite geladen ist, einschließlich Bilder und Zeug.Es ist nur die Struktur des Dokuments, die viel früher geladen wird, so dass Sie normalerweise keine Verzögerung bemerken), indem Sie das DOMContentLoaded
Ereignis oder Funktionen wie $.ready
in jQuery verwenden.
Das DOMContentLoaded-Ereignis wird ausgelöst, sobald die DOM-Hierarchie vollständig erstellt wurde. Frames sind fertig geladen. – BeauCielBleu
Sie haben absolut Recht, ich habe es behoben. Merci :) – Marian
- 1. Javascript ausführen, bevor dom geladen wird
- 2. Nach Seite geladen wird kann ich nicht Javascript-Funktionen ausführen, die Eigenschaften von Konsole zugreifen
- 3. JavaScript-Warnung lädt, bevor die Seite angezeigt wird
- 4. Wie schließe ich die Anwendung, bevor sie vollständig geladen ist?
- 5. Bild anzeigen, bevor die Seite neu geladen wird
- 6. Wie kann ich prüfen, ob eine JavaScript-Funktion geladen ist oder auf der Seite existiert, bevor Sie sie aufrufen?
- 7. Wie kann ich ein Element ausblenden, bevor die Seite in Schienen geladen wird?
- 8. Wie zeige ich ein Jquery-Dialogfeld an, bevor die gesamte Seite geladen wird?
- 9. Laden, bevor DOM bereits geladen ist
- 10. Cordova: Javascript lädt, bevor die HTML-Elemente geladen werden
- 11. Wie verdunkle ich die ganze Seite? (html)
- 12. Wie lange habe ich eine Seite geladen?
- 13. RequireJS Ausführen von Dateicode, bevor Abhängigkeiten geladen/aufgelöst werden
- 14. warten, bis die Seite geladen ist
- 15. Wie kann ich ein Lade-GIF anzeigen, bis eine ganze HTML-Seite geladen wurde?
- 16. Wie kann man warten, bis die Seite geladen wird, bevor Sie Selenium Webdriver() anklicken?
- 17. Ausführende Funktion, bevor Seite zu window.print() kommt
- 18. $ (document) .ready() feuern, bevor die partielle Ansicht geladen wird
- 19. Woher weiß ich, dass eine Seite wirklich vollständig geladen ist?
- 20. Stopp Javascript Brennen, wenn Seite geladen wird
- 21. Javascript. Wie kann ich diese Funktion (einfacher Timer) aufrufen, nachdem die Seite geladen wurde?
- 22. Selen: Wie man ein Javascript in eine Seite injiziert/ausführt, bevor andere Skripte der Seite geladen/ausgeführt werden?
- 23. wie kann ich die bildgröße bekommen, bevor es in html geladen wird?
- 24. Wie kann ich die Navigationsleiste verstecken, BEVOR die erste Seite angezeigt wird?
- 25. Code ausführen, wenn der POST abgeschlossen ist und die Seite in jQuery geladen wurde?
- 26. Gradle: assembleDebug braucht etwas Zeit, bevor die App geladen wird
- 27. Ermitteln, ob die Seite direkt umgeleitet oder geladen wurde (JavaScript)
- 28. Kann ich eine Fortschrittsanzeige anzeigen, wenn ich meine Arbeit mache, bevor die Tabellenansicht geladen wird?
- 29. Model.find(). Then() wird ausgelöst, bevor die Datensätze tatsächlich geladen werden.
- 30. Wie kann ich Javascript ausführen, bevor eine JSF <h: commandLink> -Aktion ausgeführt wird?
mögliche Duplikate von [Wie kann ich JavaScript-Funktion vor dem Laden der Seite ausführen?] (Http://stackoverflow.com/questions/885909/how-can-i-execute-jascript-function-before-page-load) – miku
Ich denke nicht, dass das ein Duplikat ist - es ist eher eine Server-Client-Kommunikationsfrage. – scunliffe