DeployJava.js 在仅安装 Java 8 时重定向一些(但不是全部)用户来安装 Java
DeployJava.js redirects some (but not all) users to install Java when only Java 8 is installed
我们有一个Java小程序,用户用它来将成像数据上传到我们的数据库,我们使用Oracle的deployJava.js来启动它。最近,一些用户,包括我的一位同事,发现自己不断被重定向到Oracle的Java安装页面,即使安装了Java。
我尝试在同事的PC上调试此问题,并发现以下内容:
-
她安装了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中我同事的计算机上,"this.isPluginInstalled()"检查失败,因此函数进入回退,其中没有对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: 假有 Java 版本 1.7: 假有 Java 版本 1.8: true已安装的 JRE:1.8.0_25火狐版本:空ActiveX 版本:假MIME 类型版本:假插件数组版本:假
在遇到此问题的同事的计算机上,使用相同的IE和Java版本,它会产生:
有 Java 版本 1.6: 假有 Java 版本 1.7: 假有 Java 版本 1.8: 假已安装的 JRE:火狐版本:空ActiveX 版本:假MIME 类型版本:假插件数组版本:假
我还能尝试什么的想法?
更新
我们目前对导致此问题的最佳猜测是 Java 7 安装,在安装 8 时未正确卸载,留下了故障的浏览器插件。我们已经能够通过从计算机卸载所有 Java 安装并仅重新安装 Java 8 的蛮力解决方案为遇到此问题的两个用户解决此问题。
我也遇到了同样的问题。虽然Chrome可以检测到1.8.0.31,但IE无法检测到jvm。下面代码中的"alert(Vms)"在IE 11中不会触发任何内容。但是在Chrome中,它会触发1.8.0.31。
32 位 Java 1.8.0.31 安装在我的 Windows 7 64 位操作系统中。
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;
}
}
- 可以前端maven插件使用节点,npm已经安装
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 使用 JavaScript 或 C# 检查客户端计算机上是否安装了 Java 应用程序(不是 JAVA!)
- 验证 Java 是否从 Node.js 安装
- DeployJava.js 在仅安装 Java 8 时重定向一些(但不是全部)用户来安装 Java
- 关于使用 Java 或 JavaScript 安装可执行文件的网站
- 如果Safari中未使用deployjava.js安装Java,则获取JRE版本
- 如何使用javascript在IE10中安装JRE/Java版本
- 检测未安装的java并提供来自Javascript的链接
- 浏览器中已安装Java与已启用Java
- Volusion Java Script -如何安装ROI跟踪转换代码
- 使用Javascript区分是否禁用或未安装JAVA
- 在OS X El Capitan上安装node-java模块
- Java小程序的部署工具包:如何在没有安装JVM的情况下避免重定向
- 我如何让我的网站检查访问者's的java安装,并提供更新或安装
- 在哪里安装 Java 程序中使用的导入模块
- 如何检查.net framework 4.5是否安装了java脚本
- 我如何检测是否安装java和知道它的版本,不使用java applet检查和不使用javascript
- 检测是否安装了java并启用了javascript
- 如何使用代码检查浏览器中是否安装了Java插件