2009-07-24 3 views
6

Ich entwickle eine ASPX-Seite, die letztendlich ein Applet starten wird, nachdem der Benutzer auf eine Schaltfläche klickt (ich verwende das <applet>-Tag). Also würde ich gerne feststellen, ob Java im Browser des Benutzers aktiviert/installiert ist.Ermitteln, ob der Clientbrowser Java installiert hat und Applets starten kann

Ich benutze die navigator.javaEnabled() -Methode. Auch wenn dies auf IE7 gut funktioniert, gibt es in Firefox 3.0.12 inkonsistente Ergebnisse (weiß nicht über verschiedene Browser), manchmal sagen, dass Java aktiviert ist (was es ist), und dann nach dem Start des Applets und Wenn Sie erneut aus dem Applet auf diese Seite zurückkommen, wird dies als false gemeldet. Wenn ich Firefox schließe und zur Startseite des Applets zurückkehre, meldet navigator.javaEnabled() erneut (korrekt).

Gibt es irgendetwas, das dieses inkonsistente Verhalten bestimmt, oder ist navigator.javaEnabled() nicht der beste Weg, um den Java Applet Check durchzuführen?

Vielen Dank im Voraus.

Antwort

10

in Ihrem Applet

public boolean isRunning() { return true; } 

nun ein Applet erstellen, ein Verfahren Fabrikat:

<applet src=".../yourapplet.jar" id="someId"> 

Und jetzt diesen Code in einigen Helferfunktion wickeln

try { 
    var x = document.getElementById('someId').isRunning() 
    return x; 
} catch(e) { 
    return false; 
} 

Warum das funktioniert? Wenn Applet ausgeführt wird, wird True zurückgegeben. Wenn Applet nicht ausgeführt wird oder Java nicht unterstützt wird, erhalten Sie eine Ausnahme, sodass Sie den Wert false erhalten.

+0

Dank Marcin für die Antwort. Ich möchte jedoch, wenn möglich, kein Applet für den Test ausführen. Vielleicht werde ich auf diese Methode zurückgreifen, wenn ich keine andere Lösung finde. Die Methode, die ich benutze, funktioniert auch in Google Chrome, aber wenn ich das Applet mit Firefox öffne, schließe es und komme auf die gleiche Seite zurück, beginnt navigator.javaEnabled mit der Rückgabe von false. Sehr eigenartig! –

+0

Die einzige Möglichkeit, 100% sicher zu sein, dass Java ausgeführt werden kann, besteht darin, Java-Code aufzurufen. Wenn Sie nicht möchten, dann machen Sie es für den Benutzer sehr sichtbar, dass, wenn etwas nicht innerhalb von X Sekunden passiert, sie höchstwahrscheinlich Java installieren müssen. –

+0

@Marcin, ist das für alle Browser + JVMs verfügbar oder funktioniert es nur bei bestimmten Kombinationen? –

1

Sie könnten auch versuchen, das Objekt-Tag zu verwenden.

Mit diesem können Sie feststellen, welche Version von Java installiert ist und den Benutzer auffordern, es herunterzuladen, wenn es nicht existiert.

Dies ist ein Beispiel-Objekt-Tag aus einer App, an der ich arbeite, JRE Komplikationen mussten wir auf 1.4.2_03 für die Kompatibilität mit anderen Anwendungen ausführen.

<object classid="clsid:CAFEEFAC-0014-0002-0003-ABCDEFFEDCBA" id="MyApplet" 
name="MyApplet" width="4" height="4" 
codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4_2_03-windows-i586.cab#Version=1,4,2,03"> 

Die classid gibt die Version von Java Sie laden möchten, können Sie dies auf eine bestimmte JRE, eine bestimmte Familie heißt 1.4.X oder was auch immer die neueste Version einstellen.

Die Codebasis steuert, wohin der Benutzer geleitet wird, wenn er nicht dem entspricht, auf den die classid eingestellt ist.

Beachten Sie, dass, wenn ein Client 1.5 oder höher installiert ist, Sie aus Sicherheitsgründen nicht auf eine ältere JRE verweisen können. Sie können dies über eine Registrierungseinstellung in Windows überschreiben, aber ich würde es nicht empfehlen.

Ich glaube, die Sicherheit ist eingerichtet, so dass Sie nur eine ältere JRE in der gleichen Familie verweisen können. d. H. Benutzer hat 1.6.0.10 können Sie auf 1.6.0.1 verweisen, aber kann nichts in 1.5.X gehen Obwohl ich denke, ich erinnere mich an ein Sicherheitsdialog Pop-up nach 1.6.0.11 wo wie zuvor würde Standard einfach die Anfrage ablehnen.

Verwandte Themen