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

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

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

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

提前致谢。

在applet中创建一个方法

 public boolean isRunning() { return true; } 

现在创建一个applet:

  

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

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

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

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

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

这是从我工作的应用程序中获取的示例对象标记,JRE复杂性要求我们在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之后弹出一个安全对话框,就像之前一样,它会默认拒绝请求。

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

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

我认为这个lib有最全面的文档和实现,我可以找到并且工作得很好

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