博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

deployJava.js的一个缺憾:无法正确检测客户端JRE

Posted on 2010-03-02 00:55  cshao  阅读(2366)  评论(0编辑  收藏  举报

deployJava.js是Java Deployment Tools中的一个,使用该工具可以极大的简化在网页中启动applet的工作。

最新版本的deployJava.js:

http://www.java.com/js/deployJava.js 

相关的注释版本:

http://www.java.com/js/deployJava.txt 

 

这么好的一个工具有一个缺憾:其getJREs()方法无法完美地检测客户端的java安装及使用情况:getJREs()会返回所有已经安装的客户端JRE,而不管该JRE是enabled还是disabled。

比如,我的本机JRE情况:

1.6.0_17    disable

1.5.0_20    enable

1.4.2       enable

此时,getJREs()会返回3个对象(1.4, 1.5, 1.6),即使1.6这个时候已经被系统禁用了。在这种情况下,如果根据getJREs()的结果而启动1.6 only的applet版本,就会造成错误。

来看一下getJREs()的代码:

 

代码
 1 getJREs: function() {
 2         var list = new Array();
 3         if (deployJava.isPluginInstalled()) {
 4             var plugin =  deployJava.getPlugin();
 5             var VMs = plugin.jvms;
 6             for (var i = 0; i < VMs.getLength(); i++) {
 7                 list[i] = VMs.get(i).version;
 8             }
 9         } else {
10             //more code here...
11         }
12 }


可以看到,在js代码中,并没有对enable/disable相关信息的处理。

Google了一下,发现也有别人提出过这个问题,但是却没有满意的答案。目前为止,除了在启动后的applet中弹出警告外,没有想到完美的解决方案。