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 }
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中弹出警告外,没有想到完美的解决方案。