117. HTA: Die Lehre von der Ausgabe von ganzen Dokumenten und
HTML-Seiten ohne Frames
Einleitung
Die Ergebnisanzeige von HTM
bzw. Textdokumenten in HTA's wird von vielen Usern mit Frames gelöst.
Der Sternenhimmelstuermer suchte einmal Codefragmente
aus dem Internet
zusammen, um damit ein
erstaunliches Ergebnis präsentieren zu können: Einen DIV-Container mit
Run-Button als Inhalt, in dem nach dessen Betätigung gerne auch ganze
andere HTM-Seiten (voll funktionsfhig und nicht im Quellcode) angezeigt
werden
können.
Das ist schon eine Leistung und klappt vor allem mit dem
Internetexplorer und HTA...
Der Code der HTA:
<html>
<head>
<title>TEST</title>
<hta:application scroll="no" windowState="normal">
<style type="text/css">
.auto {
background: #00BFFF;
height: 300px;
overflow: auto;
width: 400px;
border: 1px solid #000;
padding: 10px;
}
</style>
</head>
<script
language="VBScript">
sub Rundoku
set
oFSO=CreateObject("Scripting.FileSystemObject")
set
oFile=oFSO.OpenTextFile("irgendein.htm",1)
text=oFile.ReadAll
document.all.DataArea.InnerHTML = text
oFile.Close
end
sub
</script>
<body>
<div id=DataArea class="auto"><center><input
id=runbutton class="button" type="button" value="Ergebnis"
name="run_button" onClick="Rundoku"></center></div>
</body>
</html>
Dann brauchen Sie irgendein HTM, HTML, TXT Dokument...Das relativ im
selben Ordner liegt und das Sie sich gerne in der HTA anschauen wollen.
Die Größe ist egal. Die Formatierung von HTML bleibt erhalten, also
auch ausführbare Hyperlinks!
Erklärung
Statt irgendein.htm kann
da auch stehen
irgendein.html oder
irgendein.txt oder irgendein.log...eben
alle unverschlüsselten Textdokumente. HTMl wird im <div> Element als
HTML interpretiert.
Sobald der Ergebnis -
Button im Div-Container aktiviert wird, wird er durch den Text (Name
des Textdokumentes mit Endung *txt,
den Sie eingeben müssen und das im selben Ordner, liegt)
oder die HTML-Seite abgelöst.
Der Ergebnis-Button kann natürlich auch außerhalb des Containers
platziert werden. So verschwindet er mit Betätigung und wird durch das
Ergebnis abgelöst.
Die CSS-Formatierung ist das Gelbe vom Ei dabei: Durch Sie wird die Höhe und Breite
des DIV-Containers in Pixel bestimmt.
Durch den Overflow-Befehl
im CSS werden Scrollbalken automatisch gesetzt.
Das ist bei einer HTA megawichtig, da die Alternative mit einem Span (<span id=DataArea>
</span><p>) im Body ziemlich holprig und
unformatiert ist...
Die dritte Alternative im Body
wäre, wie oben im Link angegeben, eine Textärea zu definieren (<textarea name="DataArea" rows=20
cols=70></textarea><p>).
Der Nachteil wäre hier, dass Text oder html unformatiert und bei HTML
der Quellcode eben als Text angezeigt wird, was ja durchaus erwünscht
sein kann.
Vorsicht! Das o. a. Skript dürfte mit dieser Zeile nicht funktionieren.
Der Sternenhimmelstuermer braucht das nicht einmal zu testen.
Warum? Der Run-Button würde jede Funktionalität verlieren, da er als
simpler Text ausgedruckt wird. Ist also nichts mit Hyperlinks und Co...
Das dahinterliegende VB-Skript ist für all die eben genannten Techniken
ziemlich gleich:
sub Rundoku
set
oFSO=CreateObject("Scripting.FileSystemObject")
set
oFile=oFSO.OpenTextFile("irgendein.htm",1)
text=oFile.ReadAll
document.all.DataArea.InnerHTML = text
oFile.Close
end
sub
Es wird die ganz normale Methode benutzt, um einen File einzulesen.
Hier manipulierte der Sternenhimmelstuermer deutlich den Quellcode,
denn ab text=oFile.ReadAll
verwendete Der Sternenhimmelstuermer den InnerHTML-Befehl.
Warum? Alle anderen Varianten erzeugen im Internetexplorer eine
unzulässige Methode. Die Variable text, die den eingelesenen Pfad (text=oFile.ReadAll)
beinhaltet,
wird einfach mit document.all.DataArea.InnerHTML
gleichgesetzt.
Der Sternenhimmelstuermer kommt aus dem CMD-Bereich, da kennt man sich
bestens mit dem Spiel mit Variablen aus...
Ein weiterer Vorteil: Im Gegenteil zum einfachen Span wird das ganze Dokument eingelesen, übergeben und nicht gekürzt..genial!
Damit löst diese Abhandlung auch ein anderes Problem nebenbei: Beim
Verwenden von about blank in Frameseiten, ist der Background weiß und
nicht abänderbar.
In dem DIV-Container kann hingegen jede beliebige Farbe verwendet
werden. Ist jetzt ein wenig über zwei Ecken gedacht, aber Sie können
mit dieser Lösungsmethode beliebige Farbhintergründe erstellen. CSS mit
about blank funktioniert leider nicht - hat der Sternenhimmelstuermer
ausgiebig getestet und als nicht durchführbar qualifiziert. So bleibt
für ein einheitliches Design nur die Lösung über einen DIV-Container.
Den Inlineframe können Sie auch vergessen - DIV-Containern gehört die
Zukunft!
Dasselbe gilt natürlich für die Zwischenablage. Sie haben keine Begrenzung des Dokuments in der Zwischenablage:
<html>
<head>
<title>TEST</title>
<hta:application scroll="no" windowState="normal">
<style type="text/css">
.auto {
background: #00BFFF;
height: 300px;
overflow: auto;
width: 400px;
border: 1px solid #000;
padding: 10px;
}
</style>
</head>
<script language="VBScript">
sub Rundoku
DataArea.InnerHTML = document.parentwindow.clipboardData.GetData("text")
End Sub
</script>
<body>
<div
id=DataArea class="auto"><center><input id=runbutton
class="button" type="button" value="Ergebnis" name="run_button"
onClick="Rundoku"></center></div>
</body>
</html>
Einfach den Inhalt einer HTML-Seite oder eines Textdokumentes in die
Zwischenablage kopieren Run-Button drücken und der Inhalt wird
vollständig übernommen...
Fazit
Das der Sternenhimmelstuermer mal VBS und HTA weiterentwickelt, hätte
er nicht gedacht. Aber die Sprachen sind Easy. Die Abhandlung über HTA wird ergänzt.
Merlin bleibt mit Frames, da
ist der Sternenhimmelstuermer stur, aber dieser Code wird natürlich mit
einfließen.
Die nächste Abhandlung wird dann ganz anders sein: Es wird um Android
und die Programmierung von Apps gehen. Da das auf einem
Windows-Computer geht, durchaus
legitim.
Nachdem der Sternenhimmelstuermer jahrelang in der Windowswelt von
großen Teilen derselben ignoriert wurde, folgt er nicht mehr
Windows und wendet sich
langsam der Entwicklung von Apps zu - natürlich dann für Android (NDK).
Denn wir Amateure wenden uns auf die Dauer natürlich denjenigen (Google
und seinen Projekten) zu, wo wir uns willkommen und akzeptiert fühlen.
Dauert natürlich zwei bis drei Jahre, aber da Windows 8 auf dieser
Seite nicht mehr begleitet wird, entsteht viel Freiraum für kreative
Energie...