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...



Impressum
Datenschutz