VBscript auf Webseiten

Tricks gegen M$IE-Probleme

VB-Script lässt sich anstelle von Javascript für die dynamische Programmierung von Webseiten einsetzen. Das ergibt (zumindest in diesem Web) jedoch keinen Sinn, da solche scripts nur auf dem M$IE-Browser laufen. Ein Einsatzgebiet sind jedoch Tricks:
Mit Hilfe von VBscript kann man den M$IE dazu bringen, auch jene Funktionen auszuführen, für welche M$ die AnwenderInnen (bisher) nicht für würdig befunden hat.
VBA Visual Basic for Applications
VBscript Integration von VB-scripts in eine Webseite
Zusammenarbeit Zusammenspiel von VBscript - Javascript
Verzweigung Programm-Verzweigung je nach Browser
Browser-Plugins Feststellung der Browser-Fähigkeiten (Plugins, MIME-Types)

Integration von VBscript in eine HTML-Webseite

VBScript ist nur von M$-Browsern auf M$ Betriebssystem ausführbar. Daher ist die Verwendung von VBScript für normale Webseiten-Funktionen ausgeschlossen. Allerdings kann man VB-Programme dazu verwenden, Schwächen und Fehler des M$IE Browsers auszugleichen. Bedingung dafür ist, dass dieser Browser eindeutig erkannt wird:
Rechts einige Eigenschaften des Javascript-Objekts navigator, die von allen gängigen Browsern, sogar von M$IE unterstützt werden. Damit können sie analysieren, welcher Browser verwendet wird.
Nur M$IE kann VBA-Acripts ausführen !
Alle anderen Browser ignorieren VBA-Scripts (mit oder ohne Fehlermeldung)
Live- Live-Javascript-Javascript
VBA-Scripts können ebenso wie Javascript an jeder beliebigen Stelle einer Webseite eingesetzt werden. Scripts, die keine besondere Position erfordern, werden sinnvoll in den <head> einer HTML-Seite eingeschlossen (Beispiel rechts).

So können sie Scripts mit Buttons aufrufen:
Live- von js_alert()
Live- von vb_msgbox()
<head>
. . .
<script type="text/javascript">
function js_alert() {
alert("Hier ist Javascript");
}
</script>
<script type="text/vbscript">
function vb_msgbox()
MsgBox("Hier ist Visual Basic")
end function
</script>
</head>

Aufruf von Scripts durch HTML-Links:

Ein Javascript wird wie üblich mit javascript:funktionsname() aufgerufen.
Ein VBscript wird analog mit vbscript:funktionsname() aufgerufen, meldet sich jedoch auch als javascript.
Das Meldungsfenster sieht bei VBscript etwas anders aus als bei Javascript.
Andere Browser als M$IE ignorieren einen VBscript-Link, meist ohne Fehlermeldung.
Klicken sie die HTML-Links dieses Kastens:
<a href="javascript:js_alert()"> </a>
<a href="javascript:vb_msgbox()"> </a>
<a href="vbscript:vb_msgbox()"> </a>

Zusammenarbeit VBscript - Javascript

Strategie der Zusammenarbeit

Hier wird folgende Strategie verwendet (und empfohlen):
Ein Script muss in allen gängigen Browsern ausführbar sein und darf keine Fehlermeldung geben.
Alle Standardfunktionen werden in Javascript ausgeführt. VB wird nur dort eingesetzt, wo es unumgänglich ist.
Bedingte Verzweigungen (je nach Browser) werden vom Script automatisch ausgeführt, nicht der/dem BesucherIn der Webseite überlassen.

Technik der Zusammenarbeit:

Globale Variable werden in Javascript definiert und gemeinsam benutzt
Globale Funktionen werden gemeinsam benutzt: Javascript kann jede VBscript-Funktion aufrufen und umgekehrt.
Beim Aufruf von Funktionen können Variable übergeben werden
Rückgabe von Funktionswerten: Funktionen beider Programmiersprachen können Werte an das aufrufende Programm zurückgeben.
In diesem Beispiel wird der Zähler counter wahlweise von Javascript oder VBscript erhöht. Das erfordert zwar kein VBscript, demonstriert aber die Zusammenarbeit:

Gemäß der ober erwähnten Strategie wird die gemeinsame globale Variable counter in Javascript angelegt: Dort wird der Zählerstand gespeichert.
Das Javascript write_cn schreibt den aktuellen Zählerstand (mit DOM-Methoden) in den Textknoten cn der Webseite.
Funktion js_inc zählt in Javascript.
Funktion vb_inc zählt in VBscript.

Testen sie die Funktionen:
Live- des Javascript-Zählers
Live- des VBscript-Zählers
Im Kasten rechts (unten) wird das Live-Ergebnis angezeigt.
<script type="text/javascript">
var counter = 0;
function js_inc() {
counter++;
write_cn();
}
function write_cn() {
var n = document.getElementById("cn");
n.firstChild.nodeValue = counter;
}
</script>
<script type="text/vbscript">
function vb_inc()
counter = counter + 1
write_cn()
end function
</script>

Hier das Live-Ergebnis:
counter = <span id="cn">0</span>

Browser-Verzweigung

Bei Anwendung der oben erwähnten Strategie wird VBscript ausschließlich in Kombination mit Javascript verwendet.
VBscript übernimmt dabei nur jene Funktionen, welche durch M$IE nicht oder fehlerhaft unterstützt werden.
Deshalb beginnen und enden solche Script-Programme normalerweise in Javascript, dazwischen enthalten sie einen Teil, der je nach Browser in Javascript oder VBscript ausgeführt wird.

Methode: Abfrage des navigator-Objekts:

Für bedingte Verzweigungen je nach Browser-Type und -Version verwenden sie die Eigenschaften des Javascript-Objekts navigator. Rechts das Live-Ergebnis ihres Browsers. Allerdings können manche Browser (z.B. Opera) durch eigene Optionen getarnt werden und sich anders ausgeben.

Der erste Buchstabe der Eigenschaft appName wird hier zur Verzweigung verwendet: Bei "M" wird die oben als Beispiel gezeigte VBscript-Funktion ausgeführt, in jedem anderen Fall die Javascript-Funktion.

Live- dieser Demo zur Programmverzweigung mit Javascript branch_1.
<script type="text/javascript">
function branch_1() {
brs1 = navigator.appName.substr(0,1);
if(brs1=="M") {vb_msgbox();}
else {js_alert()}
}
</script>
. . .
<a href="javacsript:"branch_1()"> </a>

Methode:  VBscript  probeweise  ausführen

Hier wird nichts dem Zufall überlassen: Der Browser muss in jedem Fall ausprobieren, ob er VBscript "versteht".

Der Aufruf der VBscript-Funktion vb_test durch Javascript wird in einen try-Block verpackt: So wird sichergestellt, dass der Browser auch dann keine Fehlermeldung abgibt, wenn er VBscript nicht versteht.

Die VBscript-Funktion vb_test muss Erfolg oder Misserfolg zurückmelden, das wird von Javascript zur weiteren Entscheidung benutzt. Die Rückgabe von Funktionswerten erfolgt bei VB nicht durch einen return-Befehl sondern durch Zuweisung an den Namen der Funktion.

Live- dieser Demo zur Programmverzweigung mit Javascript branch_2 und VBscript vb_test.
<script type="text/javascript">
function branch_2() {
var vb = 0;
try {vb = vb_test();}
catch(e) {}
if(vb) {vb_msgbox();}
else {js_alert();}
}
</script>
<script type="text/vbscript">
function vb_test()
vb_test = 1
end function
</script>
. . .
<a href="javacsript:"branch_2()"> </a>

Beispiel: Browser-PlugIns

Die Analyse der Browser-Fähigkeiten, insbesondere jener der Hilfsprogramme (Plugins) erfolgt normalerweise mit Javascript-Standardfunktionen. Der M$IE-Browser unterstützt jedoch diese Funktionen nur teilweise oder gar nicht, deshalb ist man gezwungen, auf VBscript auszuweichen.
Die Seite "Analyse der Browser-Unterstützung" dieses Webs zeigt, wie das gemacht werden kann. Interessant zumindest als praktisches Beispiel der Zusammenarbeit zwischen Javascript und VBscript.