Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 << zurück
Java ist auch eine Insel von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 5
Java ist auch eine Insel

Java ist auch eine Insel
5., akt. und erw. Auflage
1454 S., mit CD, 49,90 Euro
Galileo Computing
ISBN 3-89842-747-1
gp Kapitel 19 Applets, Midlets und Sound
  gp 19.1 Applets und Applikationen – wer darf was?
  gp 19.2 Das erste Hallo-Applet
  gp 19.3 Die Zyklen eines Applets
  gp 19.4 Parameter an das Applet übergeben
  gp 19.5 Methoden der Applet- und AppletContext-Klasse
    gp 19.5.1 Wie das Applet den Browser-Inhalt ändern kann
    gp 19.5.2 Den Ursprung des Applets erfragen
    gp 19.5.3 Datenaustausch zwischen Applets
    gp 19.5.4 Was ein Applet alles darf
  gp 19.6 Fehler in Applets finden
  gp 19.7 Browserabhängiges Verhalten
    gp 19.7.1 Java im Browser aktiviert?
    gp 19.7.2 Läuft das Applet unter Netscape oder Microsoft Explorer?
    gp 19.7.3 Datenaustausch zwischen Applets und Java-Skripten
  gp 19.8 Musik in einem Applet und in Applikationen
  gp 19.9 Webstart
  gp 19.10 Java 2 Micro Edition
    gp 19.10.1 Konfigurationen
    gp 19.10.2 Profile


Galileo Computing

19.7 Browserabhängiges Verhaltedowntop


Galileo Computing

19.7.1 Java im Browser aktiviert?  downtop

Wenn unser Browser Java-Applets ausführen soll, aber Java gar 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 mit einem ähnlichen Namen: JavaScript. Ab JavaScript-Version 1.1 bietet uns der Interpreter die Funktion javaEnabled() an, so dass 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 aktiv 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 Browser-Variante ist eine browsergenaue Beschreibung einsetzbar.


Galileo Computing

19.7.2 Läuft das Applet unter Netscape oder Microsoft Explorer?  downtop

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 Abhilfe bringt, ist ein kleines Programm, das zunächst herausfindet, auf welchem Browser das Applet 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, und versuchen, Methoden 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.8   BrowserDetector.java

import java.applet.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;
  }
}

Die Idee lässt sich natürlich auch anwenden, um Java-Versionen zu testen; es wird einfach eine Klasse erfragt, die bei einer neuen Java-Version hinzugekommen ist, bei Java 1.2 etwa Point2D.


Tipp   Da nicht immer sichergestellt sein kann, dass Java in einer vernünftigen Version (>= 1.2) auf dem Client-Rechner der Benutzer installiert ist, lässt sich ein Test-Applet vorschalten, welches zunächst die Java-Version prüft. Anschließend kann dieses Eingangs-Applet auf eine andere Seite mit Applet über getAppletContext().showDocument() verweisen. Für unterschiedliche Browser und Java-Installationen können somit unterschiedliche Applets auf die Situation eingehen.


Galileo Computing

19.7.3 Datenaustausch zwischen Applets und Java-Skripten  toptop

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 können.

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. Die 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();

Das Argument der statischen Funktion getWindows() ist die Referenz auf das Applet-Objekt.

Die Web-Seite http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/packages.htm gibt Informationen über die Pakete und Funktionen.

 << zurück




Copyright © Galileo Press GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de