edition W3C.de

HTML 4.01-Spezifikation

Deutsche Übersetzung

Diese Version:
http://www.edition-w3.de/TR/1999/REC-html401-19991224
Aktuelle Version:
http://www.edition-w3c.de/TR/html4
Übersetzer:
Christine Kühnel (Übersetzung, fachliche Kommentierung) <kuehnel@screenexa.net>
Stefan Mintert (Fachlektorat und fachliche Kommentierung) <www.mintert.com/stefan/mail/>
Stefan Schumacher (Übersetzung, fachliche Kommentierung) <sts@schumacher-netz.de>

Bei diesem Dokument handelt es sich um eine Übersetzung eines W3C-Textes. Dieser Text ist urheberrechtlich geschützt; bitte beachten Sie die nachfolgenden Hinweise des Originaldokuments. Die Rechte an der Übersetzung liegen bei den Übersetzern und dem Verlag Addison-Wesley. Die Übersetzung hat keine durch das W3C legitimierte, normative Wirkung. Das einzige maßgebliche Dokument ist das englische Original.

Bitte senden Sie Fehler und Korrekturen zur deutschen Fassung an die Übersetzer.

Kommentare der Übersetzer, die als solche gekennzeichnet sind, unterliegen dem Urheberrecht der Übersetzer. Sie sind nicht Bestandteil des Ursprungsdokuments.

Diese Veröffentlichung ist eine Vorveröffentlichung. Kein Teil dieses Textes darf kopiert werden. Alle Rechte vorbehalten. Nach Abschluss der Arbeit wird das endgültige Dokument unter der oben angegebenen Adresse veröffentlicht. Die jetzige Veröffentlichung während der laufenden Arbeit dient zur Information von Interessierten und zur Prüfung durch die Fachöffentlichkeit. Sollten Sie Fehler finden oder Verbesserungsvorschläge haben, schicken Sie diese bitte per Mail an die Übersetzer.
Folgende Teile liegen noch in Englisch vor und müssen noch in deutscher Fassung generiert werden: (a) Gesamtinhaltsverzeichnis (b) Index



18 Skripte

Inhaltsverzeichnis

18.1 Einführung in Skripte

Ein Client-seitiges Skript ist ein Programm, das ein HTML-Dokument begleiten kann oder direkt in ihm eingebettet ist. Das Programm wird auf dem Rechner des Clients ausgeführt, wenn das Dokument geladen wird oder zu einem anderen Zeitpunkt, zum Beispiel, wenn ein Link aktiviert wird. Die Skript-Unterstützung von HTML ist unabhängig von der Skriptsprache.

Neu: Die am weitesten verbreitete Skriptsprache, die Web-Browser unterstützen, ist JavaScript. Wer JavaScript lernen möchte findet unser Lehrbuch JavaScript-Workshop nun endlich auch online!.

Skripte bieten Autoren eine Möglichkeit, HTML-Dokumente in sehr aktiver und interaktiver Weise zu erweitern. Beispiele dafür sind:

Es gibt zwei Skriptarten, die Autoren zu einem HTML-Dokument hinzufügen können:

Anmerkung. Diese Spezifikation enthält detailliertere Informationen zu Skripten in den Abschnitten über »Anmerkungen zu Skripten« in Anhang B.

18.2 Dokumente für Benutzerprogramme erstellen, die Skripte unterstützen

Der folgende Abschnitt behandelt Fragen, die Benutzerprogramme betreffen, die Skripte unterstützen.

18.2.1 Das Element SCRIPT

<!ELEMENT SCRIPT - - %Script;          -- script statements -->
<!ATTLIST SCRIPT
  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
  type        %ContentType;  #REQUIRED -- content type of script language --
  src         %URI;          #IMPLIED  -- URI for an external script --
  defer       (defer)        #IMPLIED  -- UA may defer execution of script --
  >

Start-Tag: erforderlich, End-Tag: erforderlich

Attributdefinitionen

src = uri [CT]
Dieses Attribut gibt den Ort eines externen Skripts an.
type = content-type [CI]
Dieses Attribut gibt die Skriptsprache des Elementinhalts an und überschreibt die Standard-Skriptsprache. Die Skriptsprache wird als Inhaltstyp (zum Beispiel »text/javascript«) angegeben. Autoren müssen einen Wert für dieses Attribut angeben. Es gibt keinen voreingestellten Wert für dieses Attribut.
language = cdata [CI]
Missbilligt. Dieses Attribut gibt die Skriptsprache des Elementinhalts an. Seine Wert ist der Bezeichner einer Sprache, aber weil diese Bezeichner nicht standardisiert sind, wurde dieses Attribut zu Gunsten des type-Attributs als missbilligt erklärt .
defer [CI]
Ist es angegeben, gibt dieses Boolesche Attribut dem Benutzerprogramm einen Hinweis, dass dieses Skript keinen Dokumentinhalt generieren wird (zum Beispiel kein »document.write« in JavaScript), so dass das Benutzerprogramm mit der Verarbeitung und Darstellung fortfahren kann.

An anderer Stelle definierte Attribute

Das Element SCRIPT platziert ein Skript innerhalb eines Dokuments. Diese Element kann beliebig oft im HEAD oder BODY eines HTML-Dokuments stehen.

Das Skript kann im Inhalt des SCRIPT-Elements definiert werden oder in einer externen Datei. Ist das src-Attribut nicht angegeben, müssen Benutzerprogramme den Inhalt des Elements als Skript interpretieren. Besitzt das src-Attribut einen URI-Wert, müssen Benutzerprogramme den Elementinhalt ignorieren und das Skript über den URI empfangen. Beachten Sie, dass sich das charset-Attribut auf die Zeichenkodierung des Skripts bezieht, das durch jenes src-Attribut angegeben ist; es bezieht sich nicht auf den Inhalt des SCRIPT-Elements.

Anmerkung der Übersetzer:

Mit der Vorgabe, dass Benutzerprogramme den Elementinhalt ignorieren müssen, wenn über das src-Attribut eine externe Skript-Datei eingebunden wird, weicht diese Spezifikation von älteren Auffassungen einiger Browseranbieter ab. Bevor das src-Attribut in die HTML-Spezifikation aufgenommen wurde, wurde der Elementinhalt als Alternative für den Fall betrachtet, dass das Laden der externen Datei nicht erfolgen kann.

Da viele Autoren diese Betrachtung noch in ihren Köpfen haben dürften, sei an dieser Stelle deutlich darauf hingewiesen, dass dem nicht mehr so ist. Neuere Browser schließen sich in ihrem Verhalten inzwischen auch dieser Spezifikation an.

Skripte werden durch Skript-Engines evaluiert, die dem Benutzerprogramm bekannt sein müssen.

Die Syntax von Skriptdaten ist abhängig von der Skriptsprache (siehe Abschnitt 6.14).

18.2.2 Die Skriptsprache spezifizieren

Da HTML sich nicht auf eine bestimmte Skriptsprache beschränkt, müssen Autoren dem Benutzerprogramm die Sprache jedes einzelnen Skripts explizit mitteilen. Dies kann entweder durch eine Standard-Deklaration oder durch eine lokale Deklaration geschehen.

Die Standard-Skriptsprache  

Autoren sollten die Standard-Skriptsprache für alle Skripte in einem Dokument durch Angabe der folgenden META-Deklaration im HEAD festlegen:

<META http-equiv="Content-Script-Type" content="type">

»type« ist darin der Inhaltstyp (siehe Abschnitt 6.7), der die Skriptsprache benennt. Beispiele für Werte sind »text/tcl«, »text/javascript«, »text/vbscript«.

Ohne eine META-Deklaration kann der Standard durch den HTTP-Header »Content-Script-Type« gesetzt werden:

    Content-Script-Type: type

»type« ist hier ebenfalls ein Inhaltstyp, der die Skriptsprache benennt.

Benutzerprogramme sollten die Standard-Skriptsprache für ein Dokument anhand der folgenden Schritte festlegen (von der höchsten zur niedrigsten Priorität):

  1. Spezifiziert eine META-Deklaration »Content-Script-Type«, so bestimmt der letzte im Zeichenstrom die Standard-Skriptsprache.
  2. Anderenfalls, wenn dein HTTP-Header »Content-Script-Type« spezifiziert, bestimmt der letzte im Zeichenstrom die Standard-Skriptsprache.

Dokumente, die keine Informationen zur Standard-Skriptsprache geben und Elemente enthalten, die Skripte für eingebettete Ereignisse spezifizieren, sind inkorrekt. Benutzerprogramme können trotzdem versuchen, inkorrekt angegebene Skripte zu interpretieren, sind jedoch nicht dazu verpflichtet. Autoren-Tools sollten die Standard-Skriptsprachen-Information erzeugen, um Autoren dabei zu unterstützen, ungültige Dokumente zu vermeiden.

Lokale Deklaration einer Skriptsprache  

Das Attribut type muss für jede SCRIPT-Elementinstanz in einem Dokument angegeben sein. Der Wert des type-Attributs für ein SCRIPT-Element überschreibt für dieses Element die Standard-Skriptsprache.

In diesem Beispiel deklarieren wir die Standard-Skriptsprache als »text/tcl«. Wir integrieren ein SCRIPT im Kopf, dessen Skript in einer externen Datei in der Skriptsprache »text/vbscript« vorliegt. Wir beziehen auch ein SCRIPT in den Rumpf ein, das sein eigenes Skript, geschrieben in »text/javascript«, enthält.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
     "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>Ein Dokument mit SCRIPT</TITLE>
<META http-equiv="Content-Script-Type" content="text/tcl">
<SCRIPT type="text/vbscript" src="http://someplace.com/progs/vbcalc">
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT type="text/javascript">
...etwas JavaScript...
</SCRIPT>
</BODY>
</HTML>

Referenzen auf HTML-Elemente aus einem Skript heraus 

Jede Skriptsprache hat ihre eigenen Konventionen, HTML-Objekte aus einem Skript heraus zu referenzieren. Diese Spezifikation definiert keinen Standardmechanismus, um sich auf HTML-Objekte zu beziehen.

Jedoch sollten Skripte mit Hilfe des Elementnamens Bezug auf ein Element nehmen. Skript-Engines sollten den folgenden Ablauf beachten, wenn sie ein Element identifizieren: ein name-Attribut hat Vorrang vor einem id-Attribut, wenn beide angegeben sind. Ansonsten kann das eine oder das andere verwendet werden.

18.2.3 Eingebette Ereignisse (intrinsic events)

Anmerkung: Autoren von HTML-Dokumenten werden darauf hingewiesen, dass es wahrscheinlich Änderungen im Bereich der eingebettetten Ereignisse geben kann (zum Beispiel, wie Skripte an Ereignisse gebunden werden). Die Arbeit auf diesem Gebiet wird durch die Mitglieder der W3C Document Object Model Working Group fortgesetzt (siehe Web-Site des W3C unter http://www.w3.org/ für weitere Informationen).

Attributdefinitionen

onload = script [CT]
Das onload-Ereignis tritt ein, wenn das Benutzerprogramm den Ladevorgang eines Fensters oder aller Frames innerhalb eines FRAMESETs abgeschlossen hat. Dieses Attribut kann mit den Elementen BODY und FRAMESET verwendet werden.
onunload = script [CT]
Das onunload-Ereignis tritt ein, wenn ein Benutzerprogramm ein Dokument aus einem Fenster oder Frame entfernt. Dieses Attribut kann mit den Elementen BODY und FRAMESET verwendet werden.
onclick = script [CT]
Das onclick-Ereignis tritt ein, wenn die Taste des Zeigegeräts über einem Element angeklickt wird. Dieses Attribut kann mit den meisten Elementen verwendet werden.
ondblclick = script [CT]
Das ondblclick-Ereignis tritt ein, wenn die Taste des Zeigegeräts über einem Element doppelt angeklickt wird. Dieses Attribut kann mit den meisten Elementen verwendet werden.
onmousedown = script [CT]
Das onmousedown-Ereignis tritt ein, wenn die Taste des Zeigegeräts über einem Element heruntergedrückt wird. Dieses Attribut kann mit den meisten Elementen verwendet werden.
onmouseup = script [CT]
Das onmouseup-Ereignis tritt ein, wenn die Taste des Zeigegeräts über einem Element losgelassen wird. Dieses Attribut kann mit den meisten Elementen verwendet werden.
onmouseover = script [CT]
Das onmouseover-Ereignis tritt ein, wenn das Zeigegerät über ein Element bewegt wird. Dieses Attribut kann mit den meisten Elementen verwendet werden.
onmousemove = script [CT]
Das onmousemove-Ereignis tritt ein, wenn das Zeigegerät über einem Element bewegt wird, während es über dem Element ist. Dieses Attribut kann mit den meisten Elementen verwendet werden.
onmouseout = script [CT]
Das onmouseout-Ereignis tritt ein, wenn das Zeigegerät von einem Element wegbewegt wird. Dieses Attribut kann mit den meisten Elementen verwendet werden.
onfocus = script [CT]
Das onfocus-Ereignis tritt ein, wenn ein Element den Fokus erhält, entweder durch das Zeigegerät oder durch die Tabulatornavigation. Dieses Attribut kann mit den folgenden Elementen verwendet werden: A, AREA, LABEL, INPUT, SELECT, TEXTAREA und BUTTON.
onblur = script [CT]
Das onblur-Ereignis tritt ein, wenn das Element den Fokus verliert, entweder durch das Zeigegerät oder durch die Tabulatornavigation. Es kann mit den gleichen Elementen verwendet werden wie onfocus.
onkeypress = script [CT]
Das onkeypress-Ereignis tritt ein, wenn eine Taste über einem Element gedrückt und wieder losgelassen wird. Dieses Attribut kann mit den meisten Elementen verwendet werden.
onkeydown = script [CT]
Das onkeydown-Ereignis tritt ein, wenn eine Taste über einem Element gedrückt wird. Dieses Attribut kann mit den meisten Elementen verwendet werden.
onkeyup = script [CT]
Das onkeyup-Ereignis tritt ein, wenn eine Taste über einem Element losgelassen wird. Dieses Attribut kann mit den meisten Elementen verwendet werden.
onsubmit = script [CT]
Das onsubmit-Ereignis tritt ein, wenn ein Formular abgeschickt wird. Es gilt nur für das Element FORM.
onreset = script [CT]
Das onreset-Ereignis tritt ein, wenn ein Formular zurückgesetzt wird. Es gilt nur für das Element FORM.
onselect = script [CT]
Das onselect-Ereignis tritt ein, wenn ein Benutzer Text in einem Textfeld auswählt. Dieses Attribut kann mit den Elementen INPUT und TEXTAREA verwendet werden.
onchange = script [CT]
Das onchange-Ereignis tritt ein, wenn ein Steuerelement den Eingabefokus verliert und sein Wert seit dem Erhalt des Fokus verändert wurde. Dieses Attribut gilt für die folgenden Elemente: INPUT, SELECT und TEXTAREA.

Anmerkung der Übersetzer:

Die HTML-Spezifikationen hat sich erst vergleichsweise spät der konkreten Einbindung von Skripten angenommen (ab HTML 4). Skripte werden aber schon geraume Zeit von den Browsern unterstützt (erste Implementierung unter dem Namen »LiveScript« im Navigator 2 beta, Ende 1995; siehe www.mintert.com/javascript/#chronologie). Darunter sind Browser, deren Skript-Engines eigene, voneinander abweichende Entwicklungswege nahmen. Beim Einsatz von Skripten muss man dieser Entwicklung noch immer Rechnung tragen. Man darf also nicht unbedingt erwarten, dass mehrere Browser, die vermeintlich eine bestimmte Skriptsprache unterstützen, dies in der gleichen Weise tun.

Die oben aufgelisteten Attribute zur Reaktion auf Ereignisse sind ein Beispiel dafür. Ob die Reaktionsmöglichkeit auf ein Ereignis für ein bestimmtes Element implementiert ist, kann man nicht allgemeingültig sagen. Auch diese Spezifikation, an die sich neuere Browser durchaus halten, legt für einige der Attribute nicht definitiv fest, für welche Elemente sie gelten müssen, sagt nur »für die meisten«. Als Autor sollte man sich dieser Tatsache stets bewusst sein, wenn man praxistaugliche Dokumente erstellen möchte.

Es ist möglich, eine Aktion mit einer bestimmten Anzahl von Ereignissen zu verknüpfen, die auftreten, wenn ein Benutzer mit einem Benutzerprogramm interagiert. Jedes der oben aufgeführten »eingebetteten Ereignisse« nimmt einen Wert an, der ein Skript ist. Das Skipt wird immer dann ausgeführt, wenn das Ereignis für dieses Element eintritt. Die Syntax der Skriptdaten ist abhängig von der Skriptsprache.

Anmerkung der Übersetzer:

Um genau zu sein: In der Auflistung oben sind nicht die »eingebetteten Ereignisse« selbst aufgeführt, sondern die Attribute, deren Werte Skripte darstellen, die bei Eintreten der eingebetteten Ereignisse ausgeführt werden. Eingangs dieses Kapitels werden sie korrekt »Attribute für eingebettete Ereignisse (intrinsic event attributes)« genannt. An dieser Stelle geht man etwas unsauberer, damit eventuell auch irreführend mit dem Begriff um.

Steuerelemente wie INPUT, SELECT, BUTTON, TEXTAREA und LABEL reagieren alle auf bestimmte eingebettete Ereignisse. Stehen diese Elemente nicht innerhalb eines Formulars, können sie dazu verwendet werden, die graphische Benutzerschnittstelle des Dokuments aufzuwerten.

Zum Beispiel wollen Autoren vielleicht Schaltflächen in ihre Dokumente einbinden, die zwar kein Formular übertragen, aber dennoch mit einem Server kommunizieren, wenn sie aktiviert werden.

Die folgenden Bespiele zeigen einige mögliche Verhaltensweisen von Steuerelementen und Benutzerschnittstellen, die auf eingebetteten Ereignissen beruhen.

Im folgenden Beispiel ist userName ein erforderliches Textfeld. Versucht der Benutzer, das Feld zu verlassen, ruft das onblur-Ereignis eine JavaScript-Funktion auf, die bestätigt, dass userName einen gültigen Wert hat.

<INPUT NAME="userName" onblur="validUserName(this.value)">

Anmerkung der Übersetzer:

Gemeint ist, dass onblur eine Funktion, hier validUserName(), aufgerufen wird, die prüft, ob ein gültiger Wert eingegeben wurde. Über eventuelle Reaktionen auf gültige oder ungültige Eingaben sagt das einfache Beispiel nichts.

Hier ist ein weiteres JavaScript-Beispiel:

<INPUT NAME="num"
    onchange="if (!checkNum(this.value, 1, 10)) 
        {this.focus();this.select();} else {thanks()}"
    VALUE="0">

Hier ist ein VBScript-Beispiel eines Event-Handlers für ein Textfeld:

    <INPUT name="edit1" size="50">    
    <SCRIPT type="text/vbscript">
      Sub edit1_changed()
        If edit1.value = "abc" Then
          button1.enabled = True
        Else
          button1.enabled = False
        End If
      End Sub
    </SCRIPT>

Hier ist das gleiche Beispiel mit Tcl:

    <INPUT name="edit1" size="50">
    <SCRIPT type="text/tcl">
      proc edit1_changed {} {
        if {[edit value] == abc} {
          button1 enable 1
        } else {
          button1 enable 0
        }
      }
      edit1 onChange edit1_changed
    </SCRIPT>

Hier ist ein JavaScript-Beispiel für die Ereignisbindung (event binding) in einem Skript. Zuerst folgt ein einfacher Klick-Handler:

    
<BUTTON type="button" name="mybutton" value="10">
<SCRIPT type="text/javascript">
      function my_onclick() {
         . . .
      }
    document.form.mybutton.onclick = my_onclick
 </SCRIPT>
 </BUTTON>

Hier ist ein in interessanterer Fenster-Handler:

    
<SCRIPT type="text/javascript">
      function my_onload() {
         . . .
      }

      var win = window.open("some/other/URI")
      if (win) win.onload = my_onload
</SCRIPT>

Mit Tcl sieht das so aus:

 <SCRIPT type="text/tcl">
     proc my_onload {} {
       . . .
     }
     set win [window open "some/other/URI"]
     if {$win != ""} {
         $win onload my_onload
     }
 </SCRIPT>

Beachten Sie, dass »document.write« oder äquivalente Ausdrücke in eingebetteten Event-Handlern eher ein neues Dokument erzeugen und hineinschreiben als das aktuelle zu verändern.

Anmerkung der Übersetzer:

In der Regel funktioniert die Ausführung von document.write() zur Modifikation des aktuellen Dokuments nur während das Dokument zum ersten Mal aufgebaut wird (salopp ausgedrückt: »während des Ladens«). Falls Sie das Dokument nachträglich verändern wollen, vergessen Sie document.write() vollkommen! In einem solchen Fall ist DOM-Scripting (Document Object Model) angesagt. Doch das ist ein Thema, das den Rahmen dieser Spezifikation sprengen würde.

18.2.4 Dynamische Modifikation von Dokumenten

Skripte, die ausgeführt werden, wenn das Dokument geladen wird, können in der Lage sein, den Dokumentinhalt dynamisch zu modifizieren. Die Fähigkeit, das zu tun, ist abhängig von der Skriptsprache selbst (zum Beispiel die Angabe »document.write« im HTML-Objektmodell, die von einigen Herstellern unterstützt wird).

Die dynamische Modifikation des Dokuments könnte wie folgt ausgeführt werden:

  1. Alle SCRIPT-Elemente werden in der Reihenfolge evaluiert, in der das Dokument geladen wird.
  2. Alle Skripte innerhalb eines gegebenen SCRIPT-Elements, die SGML-konformes CDATA erzeugen, werden evaluiert. Der generierte Text wird anstelle des SCRIPT-Elements in den Dokumentinhalt eingefügt.
  3. Das erzeugte CDATA wird wieder evaluiert.

HTML-Dokumente müssen konform zu der HTML-DTD sein, sowohl bevor als auch nachdem irgendein SCRIPT-Element verarbeitet wurde.

Anmerkung der Übersetzer:

Es sei noch einmal betont, was im vorhergehenden Kommentar bereits gesagt wurde: Die Überschrift der dynamischen Modifikation verleitet zur Annahme, dass sich die HTML-Seite verändert, während sie angezeigt wird. Hier geht es jedoch ausschließlich um eine Modifikation vor dem ersten Anzeigen der Seite. Alles andere erfordert einen programmgesteuerten Eingriff in das Document Object Model der angezeigten Seite. Dieses Thema ist jedoch zu neu, als dass es in dieser HTML-Spezifikation berücksichtigt sein könnte.

Die Details sind natürlich auch von der verwendeten Script-Sprache abhängig. Da das W3C keine Programmiersprachen »im Angebot« hat, wird es im Rahmen der edition W3C.de auch keine Einführung dazu geben. Dem interessierten Leser sei deshalb ein anderer Titel für den Einstieg in JavaScript empfohlen: <eigenwerbung>www.javascript-workshop.de</eigenwerbung>

Das folgende Beispiel zeigt, wie Skripte ein Dokument dynamisch verändern können. Das folgende Skript:

 <TITLE>Testdokument</TITLE>
 <SCRIPT type="text/javascript">
     document.write("<p><b>Hello World!<\/b>")
 </SCRIPT>

hat die gleichen Auswirkungen wie dieser HTML-Auszeichnung:

 <TITLE>Testdokument</TITLE>
 <p><b>Hello World!</b>

18.3 Dokumente für Benutzerprogramme erstellen, die Skripte nicht unterstützen

Der folgende Abschnitt erörtert, wie Autoren Dokumente erzeugen können, die mit Benutzerprogrammen, die Skripte nicht unterstützen, funktionieren.

18.3.1 Das Element NOSCRIPT

<!ELEMENT NOSCRIPT - - (%block;)+
  -- alternate content container for non script-based rendering -->
<!ATTLIST NOSCRIPT
  %attrs;                              -- %coreattrs, %i18n, %events --
  >

Start-Tag: erforderlich, End-Tag: erforderlich

Das Element NOSCRIPT erlaubt es Autoren, alternativen Inhalt anzubieten, wenn ein Skript nicht ausgeführt wird. Der Inhalt eines NOSCRIPT-Elements sollte nur in den folgenden Fällen von einem skriptfähigen Benutzerprogramm dargestellt werden:

Benutzerprogramme, die Client-seitige Skripte nicht unterstützen, müssen den Inhalt dieses Elements darstellen.

Im folgenden Beispiel wird ein Benutzerprogramm, welches das SCRIPT ausführt, einige dynamisch erzeugte Daten in das Dokument einfügen. Unterstützt das Benutzerprogramm keine Skripte, kann der Benutzer die Daten dennoch über einen Link beziehen.

<SCRIPT type="text/tcl">
 ...ein Tcl-Skript, um Daten einzufügen...
</SCRIPT>
<NOSCRIPT>
 <P>Zugang zu <A href="http://someplace.com/data">data.</A>
</NOSCRIPT>

18.3.2 Skriptdaten vor Benutzerprogrammen verbergen

Benutzerprogramme, die das SCRIPT-Element nicht erkennen, werden wahrscheinlich den Inhalt des Elements als Text darstellen. Einige Skript-Engines, einschließlich der Engines für die Sprachen JavaScript, VBScript und Tcl, gestatten die Angabe der Skriptzeilen in SGML-Kommentaren. Benutzerprogramme, die das SCRIPT-Element nicht erkennen, werden folglich den Kommentar ignorieren, während clevere Skript-Engines verstehen werden, dass dieses Skript im Kommentar ausgeführt werden soll.

Eine weitere Lösung des Problems ist die Speicherung der Skripte in externen Dokumenten und ihr Aufruf über das Attribut src.

Skripte in JavaScript kommentieren
Die JavaScript-Engine erlaubt die Zeichenkette »<!--« zu Beginn des SCRIPT-Elements und ignoriert weitere Zeichen bis zum Ende der Zeile. JavaScript interpretiert »//« als den Beginn eines Kommentars, der sich bis zum Ende der Zeile erstreckt. Dies wird benötigt, um die Zeichenkette »-->« vor dem JavaScript-Parser zu verbergen.

<SCRIPT type="text/javascript">
<!--  um Skriptinhalt vor alten Browsern zu verstecken
  function square(i) {
    document.write("The call passed ", i ," to the function.","<BR>")
    return i * i
  }
  document.write("The function returned ",square(5),".")
// end hiding contents from old browsers  -->
</SCRIPT>

Skripte in VBScript kommentieren
In VBScript bewirkt ein Apostroph (single quote), dass der Rest der aktuellen Zeile als Kommentar angesehen wird. Deshalb kann es dazu verwendet werden, die Zeichenkette »-->« vor VBScript zu verbergen, zum Beispiel:

   <SCRIPT type="text/vbscript">
     <!--
       Sub foo()
        ...
       End Sub
     ' -->
    </SCRIPT>

Skripte in TCL kommentieren
In Tcl wird der Rest der Zeile durch das Zeichen »#« auskommentiert:

<SCRIPT type="text/tcl">
<!--  um Skriptinhalt vor alten Browsern zu verstecken
  proc square {i} {
    document write "The call passed $i to the function.<BR>"
    return [expr $i * $i]
  }
  document write "The function returned [square 5]."
# end hiding contents from old browsers  -->
</SCRIPT>

Anmerkung. Einige Browser schließen Kommentare nach dem ersten »>«-Zeichen. Um Skriptinhalt vor solchen Browsern zu verbergen, können Sie Operanden in Vergleichs- und Shift-Operationen vertauschen (verwenden Sie zum Beispiel »y < x« statt »x > y«) oder verwenden Sie spezifische Ersatzzeichen (escapes) der Skriptsprache für »>«.