19.6 Browserabhängiges Verhalten
 
19.6.1 Java im Browser aktiviert?
 
Wenn unser Browser Java-Applets ausführen soll, aber Java überhaupt nicht aktiviert ist, dann lassen sich einige interaktive Benutzeraktionen nicht durchführen. Wir sollten daher zumindest eine Meldung anbieten, dass der Browser Java gerade nicht aktiviert hat. Dies kann beabsichtigt oder nicht beabsichtigt sein. Natürlich kommt Java dafür nicht in Frage, aber eine Skript-Sprache, die sich ähnlich anhört: JavaScript. Ab JavaScript-Version 1.1 bietet uns der Interpreter die Funktion javaEnabled() an, sodass wir eine Weiterschaltung vornehmen können:
if ( !navigator.javaEnabled() )
{
self.location.href = "nix_mit_java.html";
}
Für diese Lösung muss natürlich JavaScript aktiviert sein. Für einige Surfer ist selbst dies schon eine Sicherheitslücke, und wenn JavaScript deaktiviert ist, lässt sich hier nichts mehr machen. Falls JavaScript aktiviert ist, kommen wir dem Benutzer einen Schritt entgegen, sodass er nicht mehr manuell angeben muss, ob Java aktiviert ist oder nicht. Von dieser Technik sollten wir auch Gebrauch machen, denn nicht immer hat der Benutzer aktiv Java abgeschaltet. Im Beispiel oben haben wir eine Seite angesteuert, wobei natürlich andere Anweisungen denkbar sind. Doch diese Form ist sinnvoll, denn wir können Benutzern eine Kurzbeschreibung darüber liefern, wie Java im Browser aktiviert wird. Zusammen mit der Browservariante ist eine browsergenaue Beschreibung einsetzbar.
19.6.2 Läuft das Applet unter Netscape oder Microsoft Explorer?
 
Kann der Browser ein Applet aus irgendwelchen Gründen nicht ausführen, so sind die Meldungen an den Benutzer meist mager. Oft beschränken sie sich auf eine Exception-Angabe in der Statuszeile. Dies mag keiner mehr sehen wollen. Doch leider verschärfen inkompatible Browser die Situation. Was hier hilft, ist ein kleines Programm, welches zunächst herausfindet, auf welchem Browser es läuft. Dann können unter Umständen browser- und versionsabhängige Varianten ausgeführt werden.
Wir verwenden einen Trick, der auch beim Erkennen von Prozessortypen angewendet wird. Wir versuchen, Operationen aufzurufen, die es für den jeweils anderen Browser nicht gibt. Wenn dann eine Exception geworfen wird, wissen wir Bescheid. Nun haben ja IE und Communicator jeweils ihre eigenen Klassen, der Communicator zum Beispiel die Klasse netscape.applet. MozillaAppletContext und IE com.ms.applet.GenericAppletContext.
Beispiel Wir versuchen über die selbst gebastelten Methoden isNetscape() und isMicrosoft() etwas über unsere Laufzeitumgebung herauszufinden.
|
Listing 19.6
BrowserDetector.java
import java.applet.*;
public class BrowserDetector extends Applet
{
public void init()
{
if ( isNetscape() )
System.out.println( "This is a Netscape Browser." );
if ( isMicrosoft() )
System.out.println( "This is a Microsoft Browser." );
}
public static boolean isNetscape()
{
try {
Class.forName( "netscape.applet.MozillaAppletContext" );
}
catch ( ClassNotFoundException e ) { return false; }
return true;
}
public static boolean isMicrosoft()
{
try {
Class.forName( "com.ms.applet.GenericAppletContext" );
}
catch ( ClassNotFoundException e ) { return false; }
return true;
}
}
19.6.3 Datenaustausch zwischen Applets und Java-Skripten
 
Da der Netscape Navigator sowohl Java als auch JavaScript unterstützt, hat Netscape eine Technik implementiert, mit der das Java-Applet und das JavaScript-Programm Daten austauschen kann.
JavaScript ruft Applet auf
Innerhalb von JavaScript lassen sich alle öffentlichen Variablen und Methoden vom Applet in der Form document.appletname.variable beziehungsweise document.appletname. methode() ansprechen.
Applet ruft JavaScript auf
Ein Java-Applet kann Funktionen von JavaScript aufrufen und Formularfelder füllen. Dazu dient die Klasse JSObject aus dem Package netscape.javascript. Daher muss eine Anweisung ähnlich der folgenden sein:
import netscape.javascript.*;
Obwohl das Paket eine Spezialität von Netscape suggeriert, ist es auch beim IE dabei. Folgende Zeile liest ein Attribut member des HTML-Dokuments aus.
JSObject o = JSObject.getWindow(this);
String s;
s = ((JSObject)o.getMember("document")).getMember("member").toString();
Der Parameter der statischen Funktion getWindows() ist die Referenz auf das Applet-Objekt.
Informationen über die Dokumente gibt die Webseite http://www.netscape.com/eng/mozilla/3.0/handbook/javascript/packages.htm.
|