JürgenB: Script laden und ausführen

Beitrag lesen

Hallo Rudi,

sieht interessant aus, auch wenn ich (noch) nicht verstanden habe, an welcher Stelle der Browser veranlasst wird, den geladenen Code auszuführen.

die Funktion macht eigentlich nichts anderes, als ein Script-Element zu erzeugen und einzubinden.

Loadscript("test.js","");

macht (fast) nichts anderes, als

<script src="test.js"></script>

Wenn test.js nur Funktionsdefinitionen enthält, stehen diese nach(!) dem Laden zur Verfügung. Programmcode wird sofort ausgeführt.

Allerdings wird das Nachladen des Scripts asynchron ausgeführt. Loadscript gibt nach dem Erstellen des Script-Elements die Kontrolle sofort an das aufrufende Programm zurück und wartet nicht darauf, das das Script geladen ist. Du kannst daher auf die im nachgeladenen Script definierten Objekte nicht sofort zugreifen, sondern musst warten, bis das Nachladen abgeschlossen ist. Daher gibt es in Loadscript noch den Parameter "callback". Hier kann eine Referenz auf eine Funktion übergeben werden, die nach dem Laden aufgerufen wird:

Loadscript("test.js",function() { funktion_aus_test() });

Für das Aufrufen der Callbackfunktion werden dem Script-Element noch entsprechende Eventhandler gegeben: onload und onreadystatechange, um Browserübergreifend zu sein.

Du gibst an, dass dein Code 655 Byte umfasst. Mein Ajax- Code, den ich nur bei Bedarf nachladen will, umfasst 2,3 kB. Da muss ich mal abwägen, ob der logistische Aufwand lohnt.

Dazu musst du wissen, wie oft der Nachlader zum Einsatz kommt. Bei einem so kleinen Script würde ich das Script immer einbauen. Hier passt das Zitat von einem Kabarettisten: "Wir müssen sparen, koste es, was es wolle." :)

Eigentlich dachte ich an so etwas Einfaches wie "eval", mir fehlte nur dieser Begriff zum Suchen.

eval in Verbindung mit AJAX wäre auch eine Möglichkeit, man muss aber die "Eigenarten" von eval berücksichtigen, z.B. der Kontext, in dem eval läuft. Bei meinen Tests mit einem Nachlader mit ajax und eval waren globale Objekte "plötzlich" lokal. Außerdem sind Http-Requests nicht gerade Einzeiler.

Gruß, Jürgen