1. Die Methode zum Einbetten von Javascript in HTML besteht darin, den Javascript-Code direkt zwischen dem Tag-Paar <script> und </script> zu platzieren. Verwenden Sie das src-Attribut des <script />-Tags, um eine externe JS-Datei zu formulieren und zu platzieren der Ereignishandler, wie zum Beispiel: <p onclick="alert('Ich bin das Javascript, das vom onclick-Ereignis ausgeführt wird')">Click me</p>
Als Hauptteil der URL verwendet diese URL das spezielle Javascript:-Protokoll, wie zum Beispiel: <a href="javascript:alert('Ich bin ein Javascript, das vom Javascript:-Protokoll ausgeführt wird')">Click me</a>
Verwenden Sie die Methode document.write() von Javascript selbst, um neuen Javascript-Code zu schreiben. Verwenden Sie Ajax, um den Javascript-Code asynchron abzurufen, und führen Sie dann
die dritte und vierte Methode aus. Das geschriebene Javascript muss ausgelöst werden, bevor es ausgeführt werden kann Wenn es speziell eingestellt ist, wird die Seite nicht ausgeführt.
2. Die Ausführungsreihenfolge von Javascript auf der Seite. Der Javascript-Code auf der Seite ist Teil des HTML-Dokuments. Die Reihenfolge, in der Javascript beim Laden der Seite ausgeführt wird, ist also die Reihenfolge, in der das Einführungs-Tag <script /> erscheint . Im <script />-Tag oder über src Das importierte externe JS wird in der Reihenfolge ausgeführt, in der seine Anweisungen erscheinen, und der Ausführungsprozess ist Teil des Dokumentladens.
Die von jedem Skript definierten globalen Variablen und Funktionen können von später ausgeführten Skripten aufgerufen werden.
Der Variablenaufruf muss zuvor deklariert worden sein, sonst ist der erhaltene Variablenwert undefiniert.
<script type="text/javscrpt">//<![CDATA[
Alert(tmp); //Ausgabe undefiniert
var tmp = 1;
alarm(tmp); //Ausgabe 1
//]]></script>
Im selben Skript kann die Funktionsdefinition nach dem Funktionsaufruf erscheinen. Wenn sie sich jedoch in zwei Codeteilen befindet und der Funktionsaufruf sich im ersten Codeteil befindet, wird ein undefinierter Funktionsfehler gemeldet.
<script type="text/javscrpt">//<![CDATA[
aa(); //Browserfehler
//]]></script>
<script type="text/javscrpt">//<![CDATA[
aa(); //Ausgabe 1
Funktion aa(){alert(1);}
//]]></script>
document.write() schreibt die Ausgabe an den Speicherort des Skriptdokuments, nachdem der Browser den Inhalt des Dokuments analysiert hat, in dem sich documemt.write() befindet, und fährt mit der Analyse der Inhaltsausgabe von document.write() fort. und fahren Sie dann mit dem Parsen des HTML-Dokuments fort.
<script type="text/javascript">//<![CDATA[
document.write('<script type="text/javascript" src="test.js"></script>');
document.write('<script type="text/javascript">');
document.write('alert(2);')
document.write('alert("Ich bin" + tmpStr);');
document.write('</script>');
//]]></script>
<script type="text/javascript">//<![CDATA[
Warnung(3);
//]]></script>
Der Inhalt von test.js ist:
var tmpStr = 1;
alarm(tmpStr);
Die Reihenfolge der Popup-Werte in Firefox und Opera ist: 1, 2, ich bin 1, 3
Die Reihenfolge der Popup-Werte im IE ist: 2, 1, 3. Gleichzeitig meldet der Browser einen Fehler: tmpStr ist undefiniert. Der Grund kann sein, dass der IE nicht auf den Javascript-Code in SRC wartet geladen werden, bevor die nächste Zeile ausgeführt wird, wenn document.write. Daher wird 2 zuerst angezeigt, und wenn document.write('document.write("I am" + tmpStr)') ausgeführt wird und tmpStr aufgerufen wird, ist tmpStr nicht definiert , was zu einem Fehler führt.
Um dieses Problem zu lösen, können Sie das Prinzip der HTML-Analyse verwenden, um ein HTML-Tag zu analysieren und dann das nächste auszuführen und den Code aufzuteilen, um dies zu erreichen:
<script type="text/javascript">//<![CDATA[
document.write('<script type="text/javascript" src="test.js"></script>');
//]]></script>
<script type="text/javascript">//<![CDATA[
document.write('<script type="text/javascript">');
document.write('alert(2);')
document.write('alert("Ich bin" + tmpStr);');
document.write('</script>');
//]]></script>
<script type="text/javascript">//<![CDATA[
Warnung(3);
//]]></script>
Auf diese Weise ist die Reihenfolge der Ausgabewerte unter IE und anderen Browsern konsistent: 1, 2, ich bin 1, 3.
3. So ändern Sie die Ausführungsreihenfolge von Javascript auf der Seite mithilfe von Onload
<script type="text/javascript">//<![CDATA[
window.onload = f;
Funktion f(){alert(1);}
Warnung(2);
//]]></script>
Die Reihenfolge der Ausgabewerte ist 2, 1.
Es ist zu beachten, dass bei mehreren winodws.onload nur das effektivste wirksam wird. Die Lösung lautet:
window.onload = function(){f();f1();f2();.... . }
Verwendung von DOM-Ereignistypen der Ebene 2
if(document.addEventListener){
window.addEventListener('load',f,false);
window.addEventListener('load',f1,false);
...
}anders{
window.attachEvent('onload',f);
window.attachEvent('onload',f1);
...
}
Defer kann im IE verwendet werden. Die Funktion von defer besteht darin, den Code zu laden und nicht sofort auszuführen. Es ähnelt in gewisser Weise window.onload, weist jedoch nicht die Einschränkungen von window auf .onload kann wiederholt verwendet werden, ist jedoch nur im IE gültig, sodass das obige Beispiel geändert werden kann
<script type="text/javascript">//<![CDATA[
document.write('<script type="text/javascript" src="test.js"></script>');
document.write('<script type="text/javascript" defer="defer">');
document.write('alert(2);')
document.write('alert("Ich bin" + tmpStr);');
document.write('</script>');
//]]></script>
<script type="text/javascript">//<![CDATA[
Warnung(3);
//]]></script>
Auf diese Weise meldet der IE keinen Fehler und die Reihenfolge der Ausgabewerte lautet: 1, 3, 2, ich bin 1.
Wenn der HTML-Parser auf ein Skript stößt, muss er die Analyse des Dokuments wie gewohnt beenden und Warten Sie, bis das Skript ausgeführt wird. Um dieses Problem zu lösen, definiert der HTML4-Standard defer. Verwenden Sie „Defer“, um den Browser aufzufordern, mit der Analyse des HTML-Dokuments fortzufahren und die Ausführung des Skripts zu verzögern. Diese Verzögerung ist sehr nützlich, wenn ein Skript aus einer externen Datei geladen wird, sodass der Browser nicht warten muss, bis alle externen Dateien geladen sind, bevor er mit der Ausführung fortfährt, was die Leistung effektiv verbessern kann. IE ist derzeit der einzige Browser, der das Defer-Attribut unterstützt, aber IE implementiert das Defer-Attribut nicht korrekt, da verzögerte Skripte immer bis zum Ende des Dokuments verzögert werden und nicht nur bis zum nächsten nicht verzögerten Skript. Dies bedeutet, dass die Ausführungsreihenfolge verzögerter Skripte im IE ziemlich verwirrend ist und alle Funktionen und Variablen, die von nachfolgenden nicht verzögerten Skripten nicht benötigt werden, nicht definiert werden können. Die Ausführungszeit aller Verzögerungsskripts im IE sollte nach der Einrichtung des HTML-Dokumentbaums und vor window.onload liegen.
Profitieren Sie von Ajax.
Da xmlhttpRequest den Ladestatus externer Dokumente ermitteln kann, kann es die Ladereihenfolge des Codes ändern.