HTA: Hypertext Application

Dieser Artikel bezieht sich auf eine veraltete Technologie.

Kurzfassung

HTA wurde mit dem Internet Explorer 5 von Microsoft eingeführt. Mit HTA wird es ermöglicht, einfache Anwendungen in HTML und JScript bzw. VBScript zu entwickeln, die Gebrauch von ActiveX-Komponenten machen können. Aufgrund von Sicherheitsproblemen wurde die Idee von HTA nicht weiter verfolgt.

Beschreibung

HTA war im Internet Explorer 5 von Microsoft integriert. Ausgesprochen bedeutet HTAHTML Application“ bzw. besser „Hypertext Application“, es handelt sich also um eine Technologie für HTML-basierte Anwendungen. Das kann man sich in etwa wie eine EXE-Datei unter Windows vorstellen; bei einem Doppelklick auf die Datei im Explorer öffnet sich ein Programm. Bei HTA verhält es sich ganz ähnlich, nur daß die Datei die Endung .hta besitzt und vom Internet Explorer 5.0 abhängig ist.

Eine HTML-Anwendung ist nichts anderes als eine etwas modifizierte HTML-Datei. Wer sich mit HTML und JScript auskennt, kann mittels HTA sehr einfach eigene kleine Programme schreiben.

Vorteile

Nachteile

Aussehen einer HTA

Beispiel „Hello World“:

<html>
  <head>
  <title>Hello World</title>
  <hta:application
    id="HelloWorld"
    applicationName="HelloWorld"
    border="5pt"
    borderStyle="raised"
    caption="yes"
    maximizeButton="yes"
    minimizeButton="yes"
    showInTaskBar="yes"
    singleInstance="yes"
    sysMenu="yes"
    windowState="maximize"
  >
  </head>
  <body>
  <p>Hello World</p>
  <form>
    <input type="button" onClick="self.close()" value="Anwendung beenden">
  </form>
  </body>
</html>

Beim Code der Anwendung handelt es sich um eine etwas erweiterte HTML-Datei. Die Erweiterung besteht in allen HTA-Dateien nur aus dem <hta:application ...>. Mit self.close() läßt sich in JScript ein Fenster schließen. Da hier nur ein Fenster geöffnet ist, wird damit die Anwendung beendet.

Attribute

Attribute für das HTA-spezifische Element hta:application (siehe Beispiel in der Einführung):

applicatioName
  • Beschreibung: Setzt den Namen der Anwendung (auszulesen mit JScript).
  • Werte: Zeichenkette
  • Beispiel: applicationName="azApp"
  • Bemerkung: Muß gesetzt werden und eindeutig sein.
  • JScript-Eigenschaft: applicationName
  • Standardwert: —
border
  • Beschreibung: Bestimmt die Rahmenbreite des HTA-Fensters.
  • Werte: thick, dialog window, thin, none
  • Beispiel: border="thin"
  • Bemerkung: Nur gültig für Fenster mit Überschrift und Titel. Der Wert none hat zur Folge, daß die Minimieren- und Maximieren-Buttons sowie das Programmsymbol nicht angezeigt werden. Steht in Verbindung mit der borderStyle-Eigenschaft, welche die Art des Rahmens festlegt.
  • JScript-Eigenschaft: border
  • Standardwert: thick
borderStyle
  • Beschreibung: Bestimmt die Art des Rahmens.
  • Werte: none, complex, raised, static, sunken
  • Beispiel: borderStyle="sunken"
  • Bemerkung: Hat nur Auswirkung auf den inneren Rahmen.
  • JScript-Eigenschaft: borderStyle
  • Standardwert: normal
caption
  • Beschreibung: Bestimmt, ob das Fenster eine Titelzeile besitzt.
  • Werte: yes, no
  • Beispiel: caption="yes"
  • Bemerkung: Ohne das Attribut werden keine Minimieren- und Maximieren-Buttons angezeigt.
  • JScript-Eigenschaft: caption
  • Standardwert: yes
icon
  • Beschreibung: Bestimmt den Dateinamen des Symbols für die Anwendung.
  • Werte: Zeichenkette
  • Beispiel: icon="datei.ico"
  • Bemerkung: Die Grafik muß 32 × 32 Pixel groß sein und im Icon-Format vorliegen.
  • JScript-Eigenschaft: icon
  • Standardwert: Systemsymbol
maximizeButton
  • Beschreibung: Bestimmt, ob das Fenster einen Maximieren-Button besitzt.
  • Werte: yes, no
  • Beispiel: maximizeButton="yes"
  • Bemerkung: caption muß angezeigt werden.
  • JScript-Eigenschaft: maximizeButton
  • Standardwert: yes
minimizeButton
  • Beschreibung: Bestimmt, ob das Fenster einen Minimieren-Button besitzt.
  • Werte: yes, no
  • Beispiel: minimizeButton="yes"
  • Bemerkung: caption muß angezeigt werden.
  • JScript-Eigenschaft: minimizeButton
  • Standardwert: yes
showInTaskBar
  • Beschreibung: Bestimmt, ob die HTA in der Taskleiste erscheint.
  • Werte: yes, no
  • Beispiel: showInTaskBar="yes"
  • Bemerkung: Hat keine Auswirkung darauf, daß die Anwendung bei Alt+Tab erscheint.
  • JScript-Eigenschaft: showInTaskBar
  • Standardwert: yes
singleInstance
  • Beschreibung: Bestimmt, ob nur eine Instanz der Anwendung laufen kann.
  • Werte: yes, no
  • Beispiel: singleInstane="yes"
  • Bemerkung: Die Anwendung wird durch den applicationName identifiziert, nicht durch den URL.
  • JScript-Eigenschaft: singleInstance
  • Standardwert: no
sysMenu
  • Beschreibung: Bestimmt, ob die HTA Systemschaltflächen (Icon, Maximieren- und Minimieren-Buttons) besitzt.
  • Werte: yes, no
  • Beispiel: sysMenu="yes"
  • Bemerkung: Sollte immer auf yes gesetzt sein.
  • JScript-Eigenschaft: sysMenu
  • Standardwert: yes
version
  • Beschreibung: Bestimmt die Version der HTA.
  • Werte: Zeichenkette
  • Beispiel: version="1.4"
  • Bemerkung: Die Version erscheint in den Eigenschaften der Anwendung.
  • JScript-Eigenschaft: version
  • Standardwert: —
windowState
  • Bestimmt die Anzeigegröße der HTA.
  • Werte: normal, maximize, minimize
  • Beispiel: windowState="maximize"
  • Bemerkung: normal bedeutet, daß die Standard-Anzeigegröße des Internet Explorers übernommen wird. maximize zeigt die Anwendung maximiert an, minimize nur als Symbol in der Taskleiste.
  • JScript-Eigenschaft: windowState
  • Standardwert: normal
commandLine
  • Beschreibung: Enthält die Befehlszeilenargumente, mit denen die HTA gestartet wurde.
  • Werte: Nur lesend
  • Beispiel: command = htaObj.commandLine
  • Bemerkung: Gibt eine leere Zeichenkette zurück, wenn die HTA über HTTP gestartet wurde.
  • JScript-Eigenschaft: commandLine
  • Standardwert: —

Befehlszeilenargumente

Viele Programmen nutzen sog. Befehlszeilenargumente. So werden zum Beispiel beim Aufruf eines Programms mit: „X:\command.hta -param1 -param2“ die Parameter „param1“ und „param2“ an das Programm übergeben. In HTA lassen sich diese Parameter über die Eigenschaft commandLine auswerten.

Namen der Datei festlegen

id="MyCommandApp"

Über die Eigenschaft id läßt sich der Name einer Anwendung bestimmen. Der Name spielt insofern eine Rolle, als die Eigenschaft commandLine dem Namen zugeordnet ist, d. h., um die Eigenschaft auszulesen, ist z. B. folgender JScript-Code nötig:

MyCommandApp.commandLine

Parameter auswerten

alert(MyCommandApp.commandLine);
parameters = MyCommandApp.commandLine.replace(/ /g, '').split('-');
for (var i = 1; i < parameters.length; i++)
  alert(parameters[i]);

In der ersten Zeile wird zunächst einmal die komplette Befehlszeile samt Aufruf des Programms in einem Meldungsfeld ausgegeben.

Um die Parameter geordnet in einem Array zu speichern, werden zuerst alle Leerzeichen (replace) entfernt, dann wird die Befehlszeile anhand des „-“ in die Variable parameters als Array aufgeteilt. Im ersten Element von parameters steht der Aufruf des Programms, deshalb beginnt die Schleife mit dem zweiten Element.

Für die Befehlszeile „X:\command.hta -param1 -param2“ wird die HTA folgende Ausgabe liefern:

Beispiel zur Auswertung der Befehlszeile (commandline.zip)

Beispiel zur Auswertung der Befehlszeile, die an eine HTA übergeben wurde.

Fehlerbehandlung

Ab dem Internet Explorer 5.0 besteht die Möglichkeit, Fehler in J(ava)Script zu behandeln. Mit der try...catch-Anweisung wird einem Block von Anweisungen eine Fehlerbehandlungsroutine hinzugefügt. Über sogenannte Ausnahmen können eigene Fehlermeldungen ausgegeben bzw. die Fehler behandelt oder unterdrückt werden. Die Fehlerbehandlung kann zentral in einer Funktion erfolgen.

Fehler auffangen und ausgeben

Folgenden Code in einem JScript ablegen:

function centralErrHandler() {
  try {
    errorOne();
  } catch (e) {
    alert(e.description);
  }
  
  try {
    errorTwo();
  } catch (e) {
    alert(e.description);
  }
}

In der Funktion centralErrHandler werden die Fehler, die beim Ausführen der Funktionen errorOne und errorTwo auftreten, ausgewertet. Nach dem ein Fehler in einem try-Block aufgetreten ist, wird der try-Block verlassen und der catch-Block ausgeführt. e bezeichnet eine Variable vom Typ Error und beschreibt den Fehler; e.description enthält die Fehlermeldung.

Fehler weiterleiten

function errorOne() {
  try {
    document.formSample.test = 'ok';
  } catch (e) {
    throw e;
  }
}

Mit document.formular.test wird ein Fehler erzeugt, da kein Objekt formular existiert. Der try-Block wird demnach verlassen und die Anweisung in catch ausgeführt. Um die Fehler zentral auszuwerten, kann man den Fehler „werfen“, d. h., der Fehler wird an die übergeordnete Funktion (Aufrufer) weitergeleitet.

Eigenen Fehler definieren

function errorTwo() {
  var Schalter = 1;
  if (Schalter == 1) {
    e = new Error(11111, 'Falsche Eingabe');
    throw e;
  }
}

Mit new Error(...) kann eine eigene Ausnahme erstellt werden. Als Parameter können eine Fehlernummer und ein Fehlertext angegeben werden. Der Fehlertext steht wiederum in der Eigenschaft description. Nachdem der eigene Fehler wieder an die Funktion centralErrHandler weitergeleitet wird, wird dort der Fehlertext „Falsche Eingabe“ in einem Meldungsfeld ausgegeben.

Werfen und Einfangen von Ausnahmen (exceptions.zip)

Dieses Beispiel zeigt das Werfen und Einfangen von Ausnahmen.

Suche in Datei

Nach Auswahl einer Datei mit „Durchsuchen...“ kann deren Inhalt im Textfeld angezeigt werden. Durch Eingabe eines Suchbegriffs und Betätigen der Schaltfläche „Suche starten“ wird das erste Vorkommen des Suchbegriffs in der Datei in einem Meldungsfeld ausgegeben.

Anzeigen der Datei

var fso = new ActiveXObject("Scripting.FileSystemObject");
.
.
.
function showFile() {
  var file = fso.OpenTextFile(document.fileForm.fileName.value, 1);
  document.formFile.fileContent.value = file.ReadAll();
}

Als Grundvoraussetzung für den Zugriff auf das lokale Dateisystem wird das ActiveX-Objekt FSO (Scripting.FileSystemObject) benötigt. Die Funktion showFile regelt die Anzeige des Inhalts einer Datei im Textfeld.

Mit OpenTextFile wird die ausgewählte Datei zum Lesen geöffnet.

Parameter:

ReadAll liest den gesamten Inhalt der Datei, mit der Zuweisung wird das Textfeld mit dem Inhalt der Datei gefüllt.

Suche in der Datei

function search(searchFor) {
  var file = fso.OpenTextFile(document.fileForm.fileName.value, 1);
  var fileContent = file.ReadAll();
  alert('Gefunden an Position: ' + fileContent.indexOf(searchFor));
}

Die Datei wird geöffnet und ihr Inhalt mit ReadAll ausgelesen. Der Inhalt wird in diesem Beispiel in der Variablen fileContent gespeichert. Das erste Vorkommen in der Datei läßt sich dann einfach mit indexOf ermitteln und mittels alert in einem Meldungsfeld ausgeben.

Laden und Durchsuchen einer Textdatei (searchinfile.zip)

Durchsuchen einer Datei nach einem vorgegebenen Text.