6

我正在开发一个 .aspx 页面,该页面最终将在用户单击按钮后启动一个小程序(我正在使用<applet>标签)。所以,我想检测是否在用户的浏览器上启用/安装了 java。

我正在使用 navigator.javaEnabled() 方法。然而,即使这在 IE7 上运行良好,它在 Firefox 3.0.12 上返回不一致的结果(不知道不同的浏览器),有时说 java 已启用(确实如此),然后在启动小程序和再次从小程序返回到此页面,它将报告错误。如果我关闭 firefox 并返回到小程序启动页面,navigator.javaEnabled() 将再次报告 true(正确)。

是否有任何东西可以确定这种不一致的行为,或者 navigator.javaEnabled() 不是进行 Java 小程序检查的最佳方法?

提前致谢。

4

4 回答 4

11

在你的小程序中创建一个方法

public boolean isRunning() { return true; }

现在创建一个小程序:

<applet src=".../yourapplet.jar" id="someId">

现在将此代码包装在一些辅助函数中

try {
  var x = document.getElementById('someId').isRunning()
  return x;
} catch(e) {
  return false;
}

为什么这行得通?如果小程序运行,它将返回 true。如果applet 不运行或不支持Java,你会得到一个异常,所以你会得到错误。

于 2009-07-24T12:26:08.390 回答
1

您也可以尝试使用对象标签。

有了它,您可以确定安装了哪个版本的 java,如果不存在,则提示用户下载它。

这是一个示例对象标记,取自我正在处理的应用程序,JRE 复杂性要求我们在 1.4.2_03 上运行以与其他应用程序兼容。

 <object classid="clsid:CAFEEFAC-0014-0002-0003-ABCDEFFEDCBA" id="MyApplet" 
 name="MyApplet" width="4" height="4" 
 codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4_2_03-windows-i586.cab#Version=1,4,2,03">

classid 指定要加载的 Java 版本,您可以将其设置为特定的 JRE、特定的系列,即 1.4.X 或任何最新版本。

如果用户不符合 classid 设置的内容,则代码库控制用户被定向到的位置。

请注意,如果客户端安装了 1.5 或更高版本,由于安全限制,您无法引用较旧的 JRE,您可以通过 Windows 中的注册表设置覆盖它,但我不推荐这样做。

我相信已设置安全性,因此您只能引用同一家族中较旧的 JRE。即用户有 1.6.0.10 你可以参考 1.6.0.1 但不能去任何 1.5.X 虽然我想我记得看到在 1.6.0.11 之后弹出一个安全对话框,以前它只是默认拒绝请求。

于 2009-07-31T20:45:39.510 回答
1

还有一个名为 BrowserHawk 的商业产品。

http://www.cyscape.com/products/bhawk/workshop/detectjava.aspx?bhcp=1

于 2010-05-14T14:45:26.193 回答
0

我认为这个库有我能找到的最全面的文档和实现,并且运行良好

http://www.pinlady.net/PluginDetect/Java/

于 2012-12-28T10:45:07.360 回答