【问题标题】:DeployJava.js redirects some (but not all) users to install Java when only Java 8 is installed仅安装 Java 8 时,DeployJava.js 会重定向一些(但不是全部)用户来安装 Java
【发布时间】:2015-01-15 18:47:43
【问题描述】:

我们有一个 Java 小程序,用户可以使用它将成像数据上传到我们的数据库,我们使用 Oracle 的 deployJava.js 来启动它。最近,包括我的一位同事在内的一些用户发现,即使安装了 Java,他们也经常被重定向到 Oracle 的 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:false 有 Java 版本 1.7:假 拥有 Java 1.8 版:是的 已安装的 JRE:1.8.0_25 火狐版本:空 ActiveX 版本:假 MIME 类型版本:false 插件数组版本:false

在我同事遇到此问题的计算机上,使用相同的 IE 和 Java 版本,它会产生:

具有 Java 版本 1.6:false 有 Java 版本 1.7:假 有 Java 版本 1.8:假 已安装的 JRE: 火狐版本:空 ActiveX 版本:假 MIME 类型版本:false 插件数组版本:false

还有什么我可以尝试的想法?

更新

我们目前对造成这种情况的最佳猜测是 Java 7 安装在安装 8 时未正确卸载,导致浏览器插件出现故障。我们已经能够通过从计算机上卸载所有 Java 安装并仅重新安装 Java 8 的暴力解决方案为遇到此问题的两个用户解决此问题。

【问题讨论】:

    标签: javascript applet deployjava


    【解决方案1】:

    我也遇到了同样的问题。 虽然 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;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多