Question

J'écris un applet Java et j'aimerais connaître le meilleur moyen de l'inclure dans une page Web.

J'aimerais que l'utilisateur soit invité à installer JRE s'il ne l'a pas déjà fait. Cette fonctionnalité devrait (idéalement) fonctionner avec plusieurs navigateurs sur tous les systèmes d'exploitation sur lesquels Java est exécuté. 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 machine virtuelle Java à chaque chargement de la page. Je suppose que il s'agit de la méthode officielle SUN , mais elle utilise document.write (). , je ne peux donc pas l'utiliser une fois le rendu de la page terminé.

Était-ce utile?

La solution

Je recommanderais simplement d'utiliser la balise applet. Comme Alex B commente, la plupart des navigateurs inviteront l'utilisateur à installer à ce stade s'ils ne disposent pas du JRE.

Même Sun recommande d'utiliser le tag applet sauf sur les intranets , sauf si vous êtes sur un intranet. J'imagine que la logique est que vous pouvez héberger le téléchargement de JRE sur un serveur interne et utiliser le programme d'intégration & amp; balises d'objet pour diriger le téléchargement vers ce serveur.

J'avais l'habitude d'utiliser le programme d'intégration & amp; balises d'objet, 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 cela dans l'objet & amp; incorporer des balises pour s’assurer que l’utilisateur devra effectuer la mise à niveau s’il n’a pas la version 1.5. Cependant, ce n'est pas vraiment ce que vous voulez, vous voulez le mettre à niveau vers la toute dernière machine virtuelle Java. En tout cas, ce n'était pas le comportement le plus intelligent quand j'ai joué pour la dernière fois - il est possible qu'ils l'aient amélioré maintenant.

Autres conseils

Je suis d'accord avec jwls , il est préférable d'utiliser une balise applet car utiliser embed et object est très délicat à utiliser pour obtenir un navigateur croisé correct - au point où une la configuration par navigateur devient nécessaire.

Cependant, à l'aide de la balise applet , vous devez vous méfier des utilisateurs sur la machine virtuelle Microsoft 1.1. Lors de mes tests en février, ils comptaient toujours 5% des versions de Java . Si ces utilisateurs visitent une page où une version ultérieure est requise, ils verront une zone grise horrible.

La solution (après discussion sur java.net) consistait à utiliser un petit applet qui vérifie la version de Java et redirige vers une page d'échec si la version cible n'est pas remplie. 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top