2009-07-24 11 views
6

Je développe une page .aspx qui lancera finalement une applet après que l'utilisateur ait cliqué sur un bouton (j'utilise la balise <applet>). Donc, je voudrais détecter si Java est activé/installé sur le navigateur de l'utilisateur. J'utilise la méthode navigator.javaEnabled(). Cependant, même si cela fonctionne bien sur IE7, il renvoie des résultats incohérents sur Firefox 3.0.12 (ne sait pas sur les différents navigateurs), en disant parfois que Java est activé (ce qu'il est), puis après le lancement de l'applet et revenant de l'applet à cette page, il rapportera faux. Si je ferme firefox et retourne à la page de lancement de l'applet, navigator.javaEnabled() rapportera vrai à nouveau (correctement).Détermine si le navigateur client a installé java et peut lancer des applets

Y at-il quelque chose qui détermine ce comportement incohérent ou est-ce que navigator.javaEnabled() n'est pas la meilleure façon de faire la vérification de l'applet java?

Merci d'avance.

Répondre

10

faire dans votre applet une méthode

public boolean isRunning() { return true; } 

Maintenant, créez une applet:

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

Et maintenant envelopper ce code dans une fonction d'aide

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

Pourquoi cela fonctionne? Si l'applet s'exécute, elle retournera vrai. Si l'applet ne s'exécute pas ou que Java n'est pas supporté, vous obtiendrez une exception, donc vous obtiendrez false.

+0

Merci Marcin pour la réponse. Cependant, si possible, je ne voudrais pas lancer une applet pour le test. Peut-être que je vais recourir à cette méthode si je ne trouve pas une autre solution. La méthode que j'utilise fonctionne très bien sur Google Chrome, mais quand j'ouvre l'applet avec Firefox, puis la ferme et revient à la même page, navigator.javaEnabled commence à retourner false. Très étrange! –

+0

La seule façon d'être sûr à 100% que Java peut s'exécuter, c'est d'appeler du code Java. Si vous ne le souhaitez pas, faites en sorte qu'il soit très visible pour l'utilisateur que si quelque chose ne se produit pas dans les X secondes, il est très probable qu'il ait besoin d'installer Java. –

+0

@Marcin, est-ce disponible pour tous les navigateurs + JVM ou est-ce quelque chose qui ne fonctionne que sur certaines combinaisons? –

1

Vous pouvez également essayer d'utiliser l'étiquette d'objet. Avec elle, vous pouvez déterminer quelle version de Java est installée et demander à l'utilisateur de le télécharger s'il n'existe pas.

Ceci est un exemple de balise d'objet provenant d'une application sur laquelle je travaille, les complications JRE nous ont obligés à exécuter sur 1.4.2_03 pour la compatibilité avec d'autres applications.

<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"> 

Le classid spécifie la version de Java que vous voulez charger, vous pouvez définir à un spécifique JRE, une famille spécifique à savoir 1.4.X ou quelle que soit la dernière version est.

La base de code contrôle l'adresse de l'utilisateur si elle ne correspond pas à la définition de la classe. Notez que si un client a installé 1.5 ou supérieur, vous ne pouvez pas référencer un ancien JRE en raison de contraintes de sécurité. Vous pouvez le remplacer via un paramètre de registre dans Windows, mais je ne le recommanderais pas. Je crois que la sécurité est configurée de sorte que vous pouvez seulement référencer un JRE plus ancien dans la même famille. l'utilisateur a 1.6.0.10 vous pouvez référencer 1.6.0.1 mais ne peux pas aller à quoi que ce soit en 1.5.X Bien que je pense me souvenir d'avoir vu une boîte de dialogue de sécurité surgir après 1.6.0.11 où comme auparavant il refuserait simplement la demande.

Questions connexes