Как мне предложить пользователю установить JRE, если она еще не установлена? - PullRequest
2 голосов
/ 04 мая 2009

Я пишу Java-апплет и хотел бы знать, как лучше всего включить его в веб-страницу.

Я бы хотел попросить пользователя установить JRE, если она этого еще не сделала. Эта функция должна (в идеале) работать в разных браузерах на любой ОС, на которой работает Java. Другое требование заключается в том, что апплет должен загружаться не при загрузке страницы, а после действия пользователя, а не при загрузке JVM при каждой загрузке страницы. Я думаю это официальный путь SUN , но он использует document.write(), поэтому я не могу использовать его после того, как страница закончит рендеринг.

Ответы [ 2 ]

4 голосов
/ 04 мая 2009

Я бы порекомендовал просто использовать тег applet. Как комментирует Алекс Б, большинство браузеров предложит пользователю установить в этот момент, если у них нет JRE.

Даже Sun рекомендует с использованием тега апплета, за исключением интрасетей , если вы не находитесь в интрасети. Я предполагаю, что логика заключается в том, что вы можете разместить загрузку JRE на внутреннем сервере и использовать теги embed & object для направления загрузки на этот сервер.

Раньше я использовал теги embed & object, но из-за номеров версий это доставляло много хлопот. Допустим, вам требуется Java 1.5. Таким образом, вы указываете это в тегах object & embed, чтобы убедиться, что пользователю придется обновляться, если у него нет 1.5. Однако это не совсем то, что вам нужно, вы хотите обновить их до самой последней JVM. В любом случае, это было не самое умное поведение, когда я в последний раз играл с ним - возможно, они улучшили его сейчас.

0 голосов
/ 08 мая 2009

Я согласен с jwls , лучше использовать тег applet , потому что использование embed и object очень неудобно, чтобы получить правильный кросс-браузер - до такой степени, что пользовательские настройки для браузер становится необходимым.

Однако, используя тег applet , вам необходимо остерегаться пользователей на виртуальной машине Microsoft 1.1. Когда я тестировал в феврале, они все еще составляли 5% версий Java . Если эти пользователи зайдут на страницу, где требуется более поздняя версия, они увидят ужасную серую область.

Решением для этого (после обсуждения на java.net) было использование небольшого апплета, который проверяет версию Java и перенаправляет на страницу сбоя, если целевая версия не достигнута. Вот мой источник:

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;
        }
    }
}

Пример 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...