2009-05-04 5 views
2

Je suis en train d'écrire une applet Java, et j'aimerais connaître la meilleure façon de l'inclure dans une page Web.Comment puis-je demander à l'utilisateur d'installer JRE si elle ne l'a pas déjà fait?

Je voudrais qu'il invite l'utilisateur à installer JRE si elle ne l'a pas déjà. Cette fonctionnalité devrait (idéalement) fonctionner sur plusieurs navigateurs sur n'importe quel système d'exploitation Java. Une autre exigence est que l'applet ne doit pas être chargé au chargement de la page, mais après une action de l'utilisateur, ne pas charger la JVM à chaque chargement de page. Je suppose que this is the official SUN way, mais il utilise document.write(), donc je ne peux pas l'utiliser après le rendu de la page.

+0

est-ce pas une fonction du navigateur? Quelque chose comme "Il vous manque un plug-in nécessaire pour voir cette page"? –

Répondre

4

Je recommande d'utiliser simplement l'étiquette de l'applet. Comme le remarque Alex B, la plupart des navigateurs invitent l'utilisateur à installer à ce moment-là s'ils n'ont pas le JRE.

Même Sun recommande using the applet tag except on Intranets sauf si vous êtes sur un intranet. J'imagine que la logique ici est que vous pouvez héberger le téléchargement JRE sur un serveur interne, et utiliser les balises d'objet incorporer & pour diriger le téléchargement vers ce serveur.

J'avais l'habitude d'utiliser les balises d'objet d'intégration &, mais cela finit par être un problème en raison des numéros de version. Disons que vous avez besoin de Java 1.5. Donc vous spécifiez que dans l'objet & embarquez des balises pour vous assurer que l'utilisateur devra mettre à jour s'il n'a pas 1.5. Cependant, ce n'est pas vraiment ce que vous voulez, vous voulez qu'il les améliore à la toute dernière JVM. En tout cas, ce n'était pas le comportement le plus intelligent quand j'ai joué avec - il est possible qu'ils l'aient amélioré maintenant.

0

Je suis d'accord avec jwls, il est préférable d'utiliser une balise d'applet parce que l'utilisation Embed et l'objet sont très difficiles à obtenir navigateur croix à droite - au point où une configuration personnalisée par navigateur devient nécessaire. Toutefois, en utilisant la balise de l'applet, vous devez vous méfier des utilisateurs de la machine virtuelle Microsoft 1.1. Quand j'ai testé en Février, ils représentaient encore 5% of Java versions. Si ces utilisateurs visitent une page où une version plus récente est requise, ils verront une zone grise horrible. La solution pour cela (après discussion sur java.net) était d'utiliser une petite applet qui vérifie la version de Java et redirige vers une page d'échec si la version cible n'est pas rencontrée. Voici ma source:

JavaRedirectorApplet.java

import java.applet.Applet; 
import java.net.URL; 

/** 
* Applet built for bytecode 1.1 
* 
* If applet is less than a set level redirects to a given page, else does nothing 
*/ 
public class JavaRedirectorApplet extends Applet { 

    /** The required java version */ 
    private final static String PARAM_REQUIRED_JAVA_VERSION = "REQUIRED_JAVA_VERSION"; 

    /** The failure page */ 
    private final static String PARAM_FAILURE_PAGE = "FAILURE_PAGE"; 

    /** 
    * Initializes the applet 
    */ 
    public void init() { 

     // evaluate the required Java version 
     double requiredJavaVersion = -1; 
     String requiredJavaVersionString = getParameter(PARAM_REQUIRED_JAVA_VERSION); 
     if (requiredJavaVersionString != null) { 
      try { 
       requiredJavaVersion = Double.valueOf(requiredJavaVersionString).doubleValue(); 
      } catch (Exception e) { 
       // ignored, caught below 
      } 
     } 

     if (requiredJavaVersion < 0) { 
      System.err.println(PARAM_REQUIRED_JAVA_VERSION + " not set or set incorrectly (must be set to a number greater than 0)"); 
      return; 
     } 

     // get the failure page 
     URL failurePageURL = null; 
     String failurePageString = getParameter(PARAM_FAILURE_PAGE); 
     if (failurePageString != null) { 
      try { 
       failurePageURL = new URL(getCodeBase().getProtocol(), 
            getCodeBase().getHost(), 
            getCodeBase().getPort(), 
            failurePageString); 
      } catch (Exception e) { 
       // ignored, caught below 
      } 
     } 

     if (failurePageURL == null) { 
      System.err.println(PARAM_FAILURE_PAGE + " not set or set incorrectly (must be set to a valid path)"); 
      return; 
     } 

     // check to see whether valid 
     if (!isValidVersion(requiredJavaVersion)) { 

      // not valid redirect self 
      getAppletContext().showDocument(failurePageURL, "_self"); 
     } 

     // seems fine 
    } 

    /** 
    * Check the Java version against a required version 
    * 
    * @param versionRequired 
    * @return the verdict 
    */ 
    public static boolean isValidVersion(double versionRequired) { 
     try { 
      double javaVersion = Double.valueOf(System.getProperty("java.version").substring(0, 3)).doubleValue(); 

      if (javaVersion < versionRequired) { 
       return false; 
      } else { 
       return true; 
      } 
     } catch (NumberFormatException e) { 
      return false; 
     } 
    } 
} 

Exemple HTML

<!-- place before the actual applet --> 
<div style="display: none;"> 
    <applet code="JavaRedirectorApplet" width="0" height="0"> 
     <param name="REQUIRED_JAVA_VERSION" value="1.4"/> 
     <param name="FAILURE_PAGE" value="/failurePage.html" /> 
    </applet> 
</div> 
Questions connexes