Multimediakurs Leinfelder: Modul 11 - Anlagen: Plugintest (2/2)

(© copyright)     Letzte Änderungen:28.03.2003


Position innerhalb des Kurses

Modul 11: Anlage 10 (2/2):

Erläuterung zum Browsertechnologie-Test

von Reinhold Leinfelder

Der sequenzielle Test läuft folgendermaßen ab.

1. Test auf JavaScript-Verfügbarkeit:

es wird eine html-Seite aufgerufen, in die insbesondere Folgendes im Body steht:

<p>
<script language="JavaScript">document.write("<b><font color='#ff0000'>JavaScript is enabled in your browser!</font></b>");

location.href="browsertest/browsertest.html";</script>
</p>
<p>
<noscript>
<font color="#ff0000"><b>JavaScript is not enabled in your browser, please enable it in the preferences of your browser (depending on your browser, eg. under 'advanced' or 'multimedia'); then reload this page!</b></font>
</noscript>
</p>

Über JavaScript wird also ausgegeben, dass JavaScript aktiviert ist. Ansonsten wird der Text innerhalb des noscript-Tags angegeben. Sehr simpel!

2. Test auf Verfügbarkeit von dhtml:

dies läuft über einen Browsersniffer. Ist Netscape ab Version 4 oder Internet Explorer ab Version 4 vorhanden, ist alles ok. Ansonsten wird man auf eine extra Seite umgeleitet, die auffordert, sich die entsprechenden Browser zu besorgen. Getrennt muss noch Opera herausgelesen werden (ist schwierig, da sich Opera sowohl aus Netscape oder auch als Internet Explorer ausgeben kann). Auch Opera 5.0 kann kein dhtml darstellen, deshalb wird ebenfalls auf eine getbrowser.html-Seite umgeleitet. Der Test muss dem ersten Test nachgeschaltet sein, da er nur funktioniert, wenn sichergestellt ist, dass JavaScript aktiviert ist.

Das Skript basiert auf einem von GoLive generierten Skript, welches ich adaptiert und für Opera ergänzt habe:

<script language="JavaScript"><!--
var skipPage = true; bAgent = navigator.userAgent; bAppName = navigator.appName; bMozIdx = bAgent.indexOf("Mozilla/");

if ((bAppName.indexOf("Netscape") >= 0) && (bAgent.indexOf("Mozilla/4") >= 0)) skipPage = false;
if ((bAppName.indexOf("Netscape") >= 0) && (bAgent.indexOf("Mozilla/5") >= 0)) skipPage = false;
if ((bAppName.indexOf("Explorer") >= 0) && (bAgent.indexOf("Mozilla/4") >= 0)) skipPage = false;
if ((bAppName.indexOf("Explorer") >= 0) && (bAgent.indexOf("Mozilla/5") >= 0)) skipPage = false;
if ((bAppName.indexOf("Netscape") >= 0) && (bMozIdx >= 0) &&
(parseInt(bAgent.substring(bMozIdx+8, bMozIdx+10)) >= 6)) skipPage = false;
if ((bAppName.indexOf("Explorer") >= 0) && (bMozIdx >= 0) &&
(parseInt(bAgent.substring(bMozIdx+8, bMozIdx+10)) >= 6)) skipPage = false;
if ((bAppName.indexOf("Explorer") >= 0) && (bAgent.indexOf("Opera") >= 0)) skipPage = true;
if (skipPage) { location = 'getbrowser.html'; }
//--></script>

3. Test auf Verfügbarkeit des Quicktime Plugins vers. 4 oder höher:

Dieser Test könnte prinzipiell auch via JavaScript-Sniffern durchgeführt werden. Wegen der Schwierigkeiten des Auslesens von vorhandenen Plugins in verschiedenen Browsern wird dies jedoch nicht empfohlen. Ich gehe deshalb gemäß den Empfehlungen von Apple vor, wie sie u.a. auch in Anlage 8 (mehr zu Quicktime) kurz behandelt sind und im dort besprochenen Buch als open source freigegeben sind.

Der Code sieht folgendermaßen aus:

<OBJECT WIDTH="160" HEIGHT="120"
CLASSID="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B"
CODEBASE="http://www.apple.com/qtactivex/qtplugin.cab">

<PARAM NAME="src" VALUE="letsgo.mov">
<PARAM NAME="href" VALUE="HasQT.htm">
<PARAM NAME="autohref" VALUE="true">
<PARAM NAME="controller" VALUE="false">
<PARAM NAME="autoplay" VALUE="true">
<PARAM NAME="qtnext1" VALUE="HasQT.htm">

<EMBED SRC="GetQT4.pntg" TYPE="image/x-macpaint"
HEIGHT="120" WIDTH="160"
ALT="You need QuickTime:www.apple.com/quicktime/download"
QTSRC="Letsgo.mov" HREF="HasQT.htm" AUTOHREF="True"
CONTROLLER="False" AUTOPLAY="True"
QTNEXT1="HasQT.htm"
PLUGINSPAGE="http://www.apple.com/quicktime/download">
</EMBED>

</OBJECT>

Ich gebe hier nur eine Grunderläuterung: auf die Verschachtelung mit dem Object-Tag (und die daruch notwendigen param-Tags) gehe ich hier nicht ein, sondern verweise auf Anlage 8, wo diese Problematik behandelt wird.

Eingebettet wird ein Bild mit Name GetQT.4.pntg. Dies erfüllt zwei Zwecke. Es ist im Format macpaint, welches nur vom Quicktime Plugin (ab Version 3) angezeigt werden kann. Es verhindert also das "hijacking" von quicktime-Inhalten durch andere Plugins (z.B. Windows Media Player) (Sie können aus beliebigen Bildern macpaint Files machen, indem Sie sie im Quicktime Picture Viewer öffen und im Macpaint-Format abspeichern). Wird dieses angezeigt, ist also mindestens qt 3 vorhanden. Ist es tatsächlich version 3, bleibt das Bild kurz auf der Website stehen, danach wird man direkt zur Seite getquicktime umgeleitet (der entsprechende automatische URL-Aufruf ist im Bild mit abgespeichert). Ist jedoch Quicktime 4.0 vorhanden, wird das Attribut qtsrc verstanden und statt GetQT4.png das Filmchen letsgo.mov dargestellt. Nachdem der Film abgelaufen ist, wird automatisch das nächste Movie aufgerufen (qtnext1), aber dies ist nun eine html-Seite die angibt, dass alles ok ist (HasQT.htm). Ist Quicktime 4.1 oder höher vorhanden, weden auch die Attribute href und autohref verstanden und die Seite HasQT.html wird sofort aufgerufen. Dann muss allerdings auch noch der Server so konfiguriert sein, dass er pntg-Files dem Mime-Typ image/x-macpaint zuweist. Ist gar kein QuicktimePlugin vorhanden (oder nur Version 1 oder 2) wird man direkt zur Downloadsite via attribut pluginspace bzw. der Object-X-Kontrolle umgeleitet. Alles zu kompliziert? Na verwenden Sie doch einfach unser Testseitenangebot (siehe vorherige Seite).

4. Test auf die eingestellte Verbindungsgeschwindigkeit von Quicktime beim Benutzer.

Auch dieser Test verwendet wie o.a. opensource-Dateien sowie Erläuterungen von Apple (im o.a. Buch zu finden). Das Ganze ist relativ einfach. Man kann sich das ganze Austesten des vorhanden Quicktimeplugins sparen, da dies ja im vorherigen Test lief und nur mit dem Embed-Tag einbetten:

<EMBED SRC="whatspeed.mov" HEIGHT="80" WIDTH="160" BGCOLOR="#0000CC">

Whatspeed.mov ist ein sog. Reference movie (wie es in Anlage 8: mehr zu Quicktime kurz erläutert wurde; weitere Erläuterungen bei Apple unter quicktime/developer oder im o.a. Buch). Je nach der in den Systemeinstellungen des Nutzer-Computers voreingestellten Verbindungsgeschwindigkeit für Quicktime wird ein unterschiedliches Movie (welches nur ein Bild mit der Anzeige der Verbindungsgeschwindigkeit anzeigt) aufgerufen. Reference movies können u.a. mit dem kostenloses Tool MakeRefMovie von Apple (unter quicktime/tools/freetools) oder auch mit xml-Files erstellt werden (Anleitungen bei Apple).

5. Test nach dem Vorhandensein eines Flash-Plugins, Version 5

Auch dieser Test könnte prinzipiell über JavaScript erstellt werden, aber auch hier gilt (wie für Quicktime), dass dies bei manchen Browsern vielleicht nicht funktioniert. Außerdem müssen Sie derartige Skripte beim Erscheinen zukünftiger Browser laufend anpassen. Hier eine Lösung, die auch der Hersteller Macromedia anregt (und die in vielen Büchern zu Flash so oder so ähnlich erläutert wird). Vom Prinzip her geht es so:

In die Testseite wird ein Mini-Flash-Film eingebettet, dessen einzige Aufgabe es ist, via ActionScript auf eine andere Seite umzuleiten. Das ActionScript wird so gestaltet, dass nur Flash 5 es versteht. Wird dies nicht erkannt, wird man automatisch nach 8 Sekunden via html-Refresh-Befehl auf eine alternative Seite umgeleitet, die einen auffordert, das Flash-Plugin vom Netz zu laden.

Der Code für den Refresh-Befehl zur Wiederholung (im Head-Teil des html-Dokuments einzufügen):

<meta http-equiv="refresh" content="8;URL=noflash.html">

Der Flash-Film hat minimale Bühnengröße (z.B. 20x20 Pixel) und besteht nur aus einem einzigen, leeren Keyframe. Diesem ist folgende Basisaktion zugewiesen:

with (this) {
getURL ("flash.html");
}

Die this-Anweisung wird erst ab Version 5 des Flash-Plugins verstanden. Damit erfolgt sofort eine Umleitung zur Seite flash.html. Wichtig: die refresh-Zeit sollte nicht kürzer als 8 Sekunden sein, damit der Browser auch Zeit hat, das Flash-Plugin zu laden, falls es vorhanden ist.

In meiner Plugin-Testseite wird zuerst auch auf ältere Flash-Versionen getestet, dazu verwende ich zuerst den Befehl getURL ohne die Ergänzung mit with. Die aufgerufene Seite verwendet also einen Film getURL, der ruft eine html-Seite auf, auf der etwa steht: Sie verwenden leider nur ein altes flash-Plugin (dort ist auch ein Link zum Download des neuen Plugins). Auf dieser Seite bette ich aber nochmals einen flash-film mit dem o.a. Weiterleitungsbefehl und with ein. Der verlinkt dann auf eine andere Seite, die angibt, dass das Flash 5-Plugin vorhanden ist. Die Seite mit dem Hinweis "altes Plugin vorhanden" wird überhaupt nicht angezeigt (bzw. leuchtet nur einen Sekundenbruchteil auf), wenn Flash 5 vorhanden ist.

5. Verfügbarkeit von Java testen

hier wird ein Textapplet angebunden, welches den Text wiedergibt, dass Java aktiviert ist. Wird das Applet nicht geladen, weil keine Java Runtime-Umgebung vorhanden ist, wird alternativ ein Bild geladen, welches einen entsprechenden Text wiedergibt. Das Bild sieht folgendermaßen aus:

Der Code sieht folgendermaßen aus:

<p><applet code=BasicText.class width=400 height=60 codebase="basictextapplet">
<param name=TxFont value=TimesRoman>
<param name=Text value="Great, your browser can display JavaApplets!">
<param name=TxPointSize value=16>
<param name=TxHorizCenter value=true>
<param name=TxVertCenter value=true>
<param name=TxBorderWidth value=2>
<param name=TxBorderColor value=red>
<param name=TxBorderMargin value=5>
<img src="nojava.gif" width="186" height="67">
</applet></p>

Natürlich müssen die entsprechenden Klassen des Applets verfügbar sein (siehe Kursmodul 8.6).

Ist Java aktiviert, wird das Plugin angezeigt, dessen einzige Aufgabe es ist den in param name=text angegebenen Textstring wiederzugeben. Da die Bildanweisung (nojava.gif) innerhalb des Applet-Tagpaars liegt, wird sie ignoriert. Sie wird nur umgesetzt, falls Java deaktiviert ist.

Sie können natürlich auch ein anderes Applet anzeigen lassen. Ich wollte dazu das chomp-applet in adaptierter Form verwenden. Leider funktioniert dieses applet nicht unter Netscape. Ich habe deshalb noch eine Browserweiche eingebaut. Wird die Java-Testseite aufgerufen, gilt diese Version nur für Netscape-Browser. Alle anderen werden auf eine Seite mit zwei eingebauten Applets umgeleitet. Die Browserweiche sieht folgendermaßen aus (generiert von GoLive 5, leicht adaptiert):

<script language="JavaScript"><!--
var skipPage = true; bAgent = window.navigator.userAgent; bAppName = window.navigator.appName; bMozIdx = bAgent.indexOf("Mozilla/");
if ((bAppName.indexOf("Netscape") >= 0) && (bAgent.indexOf("Mozilla/4") >= 0)) skipPage = false;
if ((bAppName.indexOf("Netscape") >= 0) && (bAgent.indexOf("Mozilla/5") >= 0)) skipPage = false;
if ((bAppName.indexOf("Netscape") >= 0) && (bMozIdx >= 0) &&
(parseInt(bAgent.substring(bMozIdx+8, bMozIdx+10)) >= 6)) skipPage = false;
if (skipPage) { location = 'javatestIE.html'; }

//--></script>

So, nun können Sie Ihre eigenen Tests entwickeln. Vielleicht ist es aber doch einfacher, wenn Sie auf die hier angebotene Testseite zurückgreifen ;-)

© R. Leinfelder und Paläontologie München, letzte Änderung 28.03.2003


Inhaltsseite

Anlagenverzeichnis