Я согласен с 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>