JavaScript - Laden eines Scripts aus JavaScript heraus

Das aufgelistete Beispiel demonstriert das Laden einer JavaScript-Datei aus JavaScript heraus. Leider läuft das Script momentan nur auf Microsoft- (MSIE) und Gecko-Browsern (Mozilla, Netscape, ...).

Beispiel ansehen

Querverweise zum Verständnis : [Einbindung in HTML] [Spezifikation Funktionen] [Objektreferenz Element-Objekttyp] [Objektreferenz Document-Objekttyp] [Objektreferenz style-Objekt]

In den folgenden Quelltexten sind wichtige Bereiche grün und Kommentare gelb markiert.
Quelltext von exloadjs.html:
<html>

<head>
<title>
JavaScript - Beispiel
</title>

<script type="text/javascript"> <!-- Script-Bereich einleiten -->
<!-- /* HTML-Kommentar fuer Browser ohne JavaScript */

var script_element=0,heads=0;

function LoadJavaScript(file_url)
/* Laedt ein JavaScript mit dem spezifizierten Dateinamen
   Achtung: wurde bisher nur in MSIE und Mozilla/Netscape mit Erfolg getestet */
{
/* wenn nicht schon getan:
   Array aller Head-Bereiche geben lassen (normalerweise gibt's nur einen): */
  if (heads==0)
    heads=document.getElementsByTagName("head");

/* wenn schonmal geladen: altes Script-Element wegwerfen */
  if (script_element!=0)
  {
    heads[0].removeChild(script_element);
    delete script_element;
  }

/* neues Script-Element erzeugen: */
  script_element=document.createElement("script");

/* Skript-MimeType auf text/javascript setzen: */
  script_element.type="text/javascript";

/* Quelldatei angeben: */
  script_element.src=file_url;

/* Das Script in den ersten (der nullte ist der erste :-] ) Head-Bereich einbinden
   (veranlasst Ladevorgang und Ausfuehrung): */
  heads[0].appendChild(script_element);
}

/* kleiner unbedeutender Zaehler, nur zur Demonstration: */
var counter=0;

/* und ein Array voller Farbwerte, auch nur zur Demonstration: */
var colors=new Array("#FFFFDD","#FFDDDD","#FFDDFF","#DDDDFF","#DDFFFF","#DDFFDD");

//--> <!-- HTML-Kommentarende -->
</script> <!-- Script-Bereich beenden -->

</head>
<body>

<a href="loadjs.html">Erkl&auml;rung</a>
<!-- Link zurueck auf loadjs.html -->

<br><br><br>

<!-- Hier folgt eine Div-Sektion: --> 
<div name="myBox" id="myBox" style="border:solid 1px black; padding:1ex;">
klicke auf den Link
</div>

<br>

<!-- hier lassen wir per Klick das JavaScript laden: -->
<a href="javascript:LoadJavaScript('exloadjs.js')">Script laden und ausfuehren</a>

<!-- hier lassen wir per Klick das von php erzeugte JavaScript laden: -->
<a href="javascript:LoadJavaScript('exloadjs.php?counter='+counter+'&step=1')">Script (erzeugt mittels PHP) laden und ausfuehren</a>

</body>
</html>
Quelltext von exloadjs.js:
/* Den Zaehler, den wir in exloadjs.html definiert haben, hochzaehlen: */
counter++;

/* Den Stil des Hintergrundes der Div-Sektion
   mit den in exloadjs.html definierten Farben setzen: */
var theBox=document.getElementById("myBox");
theBox.style.background=colors[counter%colors.length];

/* und noch den Inhalt aendern: */
theBox.innerHTML="Das Script \"exloadjs.js\" wurde "+counter+" mal geladen";
Quelltext von exloadjs.php:
<?php
/*
 * (c) 2004 Detlef Lindenthal & Ulrich Kritzner
 * ja, an dem Dreizeiler haben zwei Leute gebastelt ;-)
 */

/* Inhalt soll als JavaScript interpretiert werden: */
header("content-type: text/javascript");

/* Script soll jedes mal neu geladen und nicht zwischengespeichert werden: */
header("cache-control: no-store, no-cache, must-revalidate");
header("cache-control: post-check=0, pre-check=0");

/* Argument counter holen */
$counter=$_GET["counter"];

/* Argument step holen */
$step=$_GET["step"];

/* counter hochzaehlen */
$counter+=$step;

/* Counter per JavaScript setzen */
printf("counter=%d;",$counter);
?>

/* Den Stil des Hintergrundes der Div-Sektion
   mit den in exloadjs.html definierten Farben setzen: */
var theBox=document.getElementById("myBox");
theBox.style.background=colors[counter%colors.length];

/* und noch den Inhalt aendern: */
theBox.innerHTML="Das Script \"exloadjs.js\" wurde "+counter+" mal geladen";
Autor: Ulrich Kritzner