我正在编写一个Java applet,并希望了解将其包含在网页中的最佳方式。
我希望它提示用户安装JRE,如果她还没有。
此功能应该(理想情况下)在任何运行的OS Java上进行跨浏览。
另一个要求是applet不应该在页面加载时加载,但是在用户操作之后,不要在每个页面加载时加载JVM。
我猜this is the official SUN way,但它使用document.write()
,因此在页面完成渲染后我无法使用它。
答案 0 :(得分:4)
我建议只使用applet标签。正如Alex B评论的那样,如果用户没有JRE,大多数浏览器都会提示用户在那时进行安装。
除非您在Intranet上,否则Sun建议使用using the applet tag except on Intranets。我想这里的逻辑是你可以在内部服务器上托管JRE下载,并使用embed& amp;用于将下载指向该服务器的对象标记。
我曾经使用嵌入式和放大器对象标签,但由于版本号,最终会成为麻烦。可以说你需要Java 1.5。所以你在对象&中指定它嵌入标签以确保用户必须升级,如果他们没有1.5。但是,这不是你想要的,你希望它将它们升级到最新的JVM。无论如何,当我上次玩它时,它并不是最聪明的行为 - 现在它们可能已经改进了。
答案 1 :(得分:0)
我同意 jwls ,最好使用 applet 标记,因为使用embed和object非常难以获得正确的跨浏览器 - 到了自定义点每个浏览器的设置都是必要的。
但是,使用 applet 标记时,您需要注意Microsoft VM 1.1上的用户。当我在二月份测试时,他们仍然占5% of Java versions。如果这些用户访问需要更高版本的页面,他们将看到一个可怕的灰色区域。
解决方案(在讨论java.net之后)是使用一个小applet来检查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>