我们有一个Java applet,用户可以使用它来将成像数据上传到我们的数据库,我们使用Oracle的deployJava.js来启动它。最近,包括我的一位同事在内的一些用户发现自己经常被重定向到Oracle的Java安装页面,即使安装了Java。
我试图在我的同事的电脑上调试这个,并找到了以下内容:
她安装了Java 8,但没有安装Java 7.(删除以前的Java安装并且仅使用Java 8不足以重现此问题。)
此问题发生在Internet Explorer 11和当前的Chrome和Firefox版本中;允许插件在网站上运行后,Chrome和Firefox在重新加载页面和后续访问后工作(即使使用"允许一次"),而暂时或永久允许在Internet Explorer中没有任何区别。对于具有相同问题的其他用户而言,事物突然开始工作的行为无法重现。
这与用户代理字符串错误JDK-8026474无关,我们使用当前版本的deployJava.js来修复此问题。
启用Internet Explorer中的兼容模式没有任何区别。
尝试在Javascript中调试此问题时,问题出现在函数getJREs中:
getJREs: function() {
var list = new Array();
if (this.isPluginInstalled()) {
var plugin = this.getPlugin();
var VMs = plugin.jvms;
for (var i = 0; i < VMs.getLength(); i++) {
list[i] = VMs.get(i).version;
}
} else {
var browser = this.getBrowser();
if (browser == 'MSIE') {
if (this.testUsingActiveX('1.7.0')) {
list[0] = '1.7.0';
} else if (this.testUsingActiveX('1.6.0')) {
list[0] = '1.6.0';
} else if (this.testUsingActiveX('1.5.0')) {
list[0] = '1.5.0';
} else if (this.testUsingActiveX('1.4.2')) {
list[0] = '1.4.2';
} else if (this.testForMSVM()) {
list[0] = '1.1';
}
} else if (browser == 'Netscape Family') {
this.getJPIVersionUsingMimeType();
if (this.firefoxJavaVersion != null) {
list[0] = this.firefoxJavaVersion;
} else if (this.testUsingMimeTypes('1.7')) {
list[0] = '1.7.0';
} else if (this.testUsingMimeTypes('1.6')) {
list[0] = '1.6.0';
} else if (this.testUsingMimeTypes('1.5')) {
list[0] = '1.5.0';
} else if (this.testUsingMimeTypes('1.4.2')) {
list[0] = '1.4.2';
} else if (this.browserName2 == 'Safari') {
if (this.testUsingPluginsArray('1.7.0')) {
list[0] = '1.7.0';
} else if (this.testUsingPluginsArray('1.6')) {
list[0] = '1.6.0';
} else if (this.testUsingPluginsArray('1.5')) {
list[0] = '1.5.0';
} else if (this.testUsingPluginsArray('1.4.2')) {
list[0] = '1.4.2';
}
}
}
}
if (this.debug) {
for (var i = 0; i < list.length; ++i) {
log('[getJREs()] We claim to have detected Java SE ' + list[i]);
}
}
return list;
}
在我的同事在Internet Explorer中,&#34; this.isPluginInstalled()&#34;检查失败,所以函数进入后备,没有检查Java 8.我尝试创建deployJava的本地副本并手动添加一个检查,但没有任何效果 - IE仍然失败。
这是我为评估问题而编写的测试页:
<html>
<head><title>DeployJava test</title></head>
<body>
<script src="https://www.java.com/js/deployJava.js"></script>
<script>
document.write("Has Java version 1.6: " + deployJava.versionCheck("1.6") + "<br\>");
document.write("Has Java version 1.7: " + deployJava.versionCheck("1.7") + "<br\>");
document.write("Has Java version 1.8: " + deployJava.versionCheck("1.8") + "<br\>");
document.write("Installed JREs: " + deployJava.getJREs() + "<br\>");
document.write("Firefox version: " + deployJava.firefoxJavaVersion + "<br\>");
document.write("ActiveX version: " + deployJava.testUsingActiveX("1.8.0") + "<br\>");
document.write("MIME type version: " + deployJava.testUsingMimeTypes("1.8") + "<br\>");
document.write("Plugin Array version: " + deployJava.testUsingPluginsArray("1.8.0"));
</script>
</body>
</html>
在我的计算机上,这会在IE 11中产生以下内容:
Java版本1.6:false Java版本1.7:错误 Java版本1.8:是的 已安装的JRE:1.8.0_25 Firefox版本:null ActiveX版本:false MIME类型版本:false 插件阵列版本:false
在我的同事遇到此问题的计算机上,使用相同的IE和Java版本,它会产生:
Java版本1.6:false Java版本1.7:错误 Java版本1.8:false 已安装的JRE: Firefox版本:null ActiveX版本:false MIME类型版本:false 插件阵列版本:false
关于我还能尝试什么的想法?
更新
我们目前对造成这种情况的最佳猜测是Java 7安装在安装8时没有正确卸载,留下了一个故障的浏览器插件。我们已经能够通过从他们的计算机卸载所有Java安装并重新安装Java 8的强力解决方案来解决这个问题的用户。
答案 0 :(得分:0)
我也遇到了同样的问题。 虽然Chrome可以检测到1.8.0.31,但IE无法检测到jvm。 &#34;警报(Vms)&#34;在下面的代码中没有在IE 11中触发任何内容。但在Chrome中,它会触发1.8.0.31。
我的Windows 7 64位操作系统中安装了32位Java 1.8.0.31。
getJREs: function() {
var list = new Array();
if (this.isPluginInstalled()) {
var plugin = this.getPlugin();
var VMs = plugin.jvms;
alert(VMs);
for (var i = 0; i < VMs.getLength(); i++) {
list[i] = VMs.get(i).version;
}
}