Nachfolge-Technologie für HTML-Applications (HTA)?
In früheren Versionen des Internet Explorers wurde ein Typ von lokalen Anwendungen unterstützt, der sich "HTML-Applications" (HTA) nannte: Im Grunde eine normale Webanwendung, aber ohne serverseitigen Anteil und mit umfangreichen Berechtigungen auf dem lokalen System ausgestattet. Typischer Anwendungsfall waren administrative Scripts (VBScript, JScript), die eine einfache GUI brauchten. Irgendwann mit IE9/IE10 war das aber nicht mehr state-of-the-art.
Gibt es dafür einen legitimen Nachfolger unter Windows? Was wäre der Königsweg, um z.B. ein Powershell-Script mit einer GUI aufwerten, die gescriptet (und nicht kompiliert) ist und auf einem Windows-Betriebssystem im Auslieferungszustand (ohne zusätzliche Software) ablauffähig wäre?
3 Antworten
Ich habe bis jetzt noch nichts über einen Nachfolger gehört.
Ich kann nur sagen: Irgendwie ist doch alles veraltet und nicht mehr "state-of-the-art".
Nicht nur "mshta.exe" (HTML-Anwendungen) sterben aus. Im ActiveScripting gibt es z.B. unter .NET Framework noch VSA "Visual Studio Application", was
auch schon veraltet ist und ausstirbt.
Bei Java stirbt zum Beispiel das "NPAPI" Plugin aus. Ich glaube ab nächsten Monat soll es ganz verschwinden, d.h. Applets wird es in Java nicht mehr geben. Ersatz gibt dafür nun Java Web Start.
Ebenfalls ist JavaScript am Aussterben. JavaScript ist zwar in den letzten Jahren sehr mächtig geworden und hat eine ziemliche Eigenart, mehr Performance hingegen bietet "WebAssembly", was JavaScript ablösen wird.
Flash und Silverlight will auch keiner mehr nutzen. Ersetzt und ersetzbar durch HTML5. (und eventuell gibt es noch das mächtige JavaFX).
JavaFX (und eventuell kennst du dich auch mit Android aus ?) ist ein wichtiges
Stichwort, denn unter JavaFX (und Android) kann man das Design und
Layout nicht nur per Code, sondern auch mit XML und CSS erstellen.
In Android wird das Layout und Design überlichweise sogar mit XML erstellt. XML = Extendable Markup Language
In JavaFX geht man ähnlich vor und erstellt das Layout überlicherweise mit
XML. Genauer gesagt heißt es FXML, basiert aber auf XML. Das Design
wird mit CSS erstellt (Farbe der Buttons, etc.):
So wie man für VBScript HTAs geschrieben hat, gibt es in Powershell ein Ähnliches Konzept: Um mit PowerShell eine GUI zu erstellen gibt es das WPF-XAML (Windows Presentation Foundation - Extendable Application Markup Framework) / WPF-Anwendungen, das auch auf XML basiert. Das Layout kann dabei ähnlich wie in HTML erstellt werden. Visual Studio (es reicht die gratis Version "Express") hat zudem einen GUI-Editor und eine sehr mächtige Bibilothek an grafischen Elementen und Layout-Möglichkeiten (Stack Panel, Root Panel, Border Panel usw.). Der eigentliche Programmcode wird mit PowerShell umgesetzt (was auch bei JavaFX und Android der Fall ist). Dieses Konzept nennt man übrigens MVC-Design Pattern. (Model, View & Controller). Powershell ist der Controller (Die Programmlogik). View erzeugst du in XAML mit Visual Studio und Model sind die Daten, wobei man das nicht immer klar eingrenzen kann.
https://de.wikipedia.org/wiki/Model_View_Controller
Manversucht bei WPF-XAML (und Android und JavaFX) mit diesem Konzept ganz einfach Aussehen und Logik zu trennen, da das ganze Aussehen rein deklarativ erfolgt.
Das einzige, was komiliert wird, ist in Visual Studio eine kleine Klasse, die die XML Datei lädt, um das Laxout zu laden. Beispiel für ein Fenster mit dem Text ("Hallo Welt") wäre:
<Window x:Class="WpfApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication"
mc:Ignorable="d"
Title="MainWindow" Height="800" Width="600">
<Label x:Name="label" Content="Hallo Welt." HorizontalAlignment="Left" Height="24" Margin="20,29,0,0" VerticalAlignment="Top" Width="212"/>
</Window>
In JavaFX ein Beispiel:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0"
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.essential_bytes.blog.fxml_example.main.MyController">
<children>
<Button fx:id="button" layoutX="19.0" layoutY="217.0" mnemonicParsing="false"
onAction="#buttonPressed" prefHeight="25.0" prefWidth="550.0" text="moveOver" />
<MenuBar layoutY="2.0" prefHeight="25.0" prefWidth="600.0">
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem id="exit" fx:id="exit" mnemonicParsing="false" text="Close" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Edit">
<items>
<MenuItem mnemonicParsing="false" text="Delete" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Help">
<items>
<MenuItem mnemonicParsing="false" text="About" />
</items>
</Menu>
</menus>
</MenuBar>
<Label fx:id="label" layoutX="19.0" layoutY="252.0" prefHeight="134.0" prefWidth="550.0" text="Label" />
<TextArea fx:id="textArea" layoutX="19.0" layoutY="42.0" prefHeight="161.0" prefWidth="550.0" />
</children>
</Pane>
Und in Android:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>
Wie du siehst, sieht das alles relativ ähnlich aus und wenn man XML
einmal gelernt hat, was wirklich sehr leicht ist, dann lässt sich das
bei vielen Programmiersprachen anwenden. XML kann auch beim
Programmieren als einfache Möglichkeit dienen, einen Ablageort für
Einstellungen der App zu haben.
Zum Beispiel ein Auszug aus meinen MP3-Player-Applikation in Java siehst du im Screenhot.