3

我的任务是确定是否在用户附带的浏览器上安装并启用了 Java。

我正在navigator.javaEnabled()为此使用方法。

除了 Chrome 浏览器外,它在任何地方都可以正常工作:即使 Chrome 上根本没有安装 Java 插件,它也会显示 TRUE。

这是错误还是功能?如何在 Chrome 中解决我的任务?

铬 23,Windows。

4

2 回答 2

3

此问题已多次向 Chromium 项目报告:

前者是开放的,后者作为 WontFix 关闭。

社区中似乎对应该返回的值存在一些分歧:

目前还不清楚这里的正确行为是什么;它不是规范的一部分,MDN 中对预期行为的描述非常特定于一种偏好,这种偏好不仅在 Chrome 中不存在,而且在 Gecko 中也不再存在(因为它已被通用替换启用和禁用任意插件的能力)

看起来 Chrome 根据以下条件返回 true:

请注意,它明确表示它并没有指出是否实际支持 Java,只是表示首选项的值。因此,如果插件没有安装,因此用户没有明确禁用,那么根据这些文档,它实际上应该返回 true,而不是 false。我们将安装但禁用的插件视为未安装用于 Web 内容目的的插件。

强调我的


因此,我能想到的检测 Java 是否正在运行的唯一解决方案是在页面上实际放置一个 Applet,看看您是否可以通过 JavaScript 与它进行交互。

于 2012-11-30T15:45:15.907 回答
0

我添加了 Chrome 解决方法:

var isJavaEnabled = (function() {
    if (!Ext.isChrome) {
        return window.navigator.javaEnabled();
    }

    // Chrome bug https://code.google.com/p/chromium/issues/detail?id=108957
    // get all installed plugins
    var plugins = Array.prototype.slice.call(window.navigator.plugins, 0); 
    // looking for Java
    return plugins.some(function(plugin) {
        return plugin && String(plugin.name).toLowerCase().indexOf("java") > -1;
    });
})();
于 2014-05-12T12:12:19.550 回答