确定客户端浏览器是否已安装Java并可以启动applet

时间:2009-07-24 11:28:04

标签: java firefox applet navigator

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

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

是否存在确定此不一致行为的任何内容,或者navigator.javaEnabled()是否是执行Java applet检查的最佳方法?

提前致谢。

4 个答案:

答案 0 :(得分:10)

在applet中添加方法

public boolean isRunning() { return true; }

现在创建一个小程序:

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

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

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

为什么会这样?如果applet运行,它将返回true。如果applet没有运行或者Java不受支持,你将获得异常,所以你会得到错误。

答案 1 :(得分:1)

您也可以尝试使用object标签。

有了它,你可以确定安装了哪个版本的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之后弹出一个安全对话框,就像以前一样,它会默认拒绝请求。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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