我的任务是确定是否在用户附带的浏览器上安装并启用了 Java。
我正在navigator.javaEnabled()
为此使用方法。
除了 Chrome 浏览器外,它在任何地方都可以正常工作:即使 Chrome 上根本没有安装 Java 插件,它也会显示 TRUE。
这是错误还是功能?如何在 Chrome 中解决我的任务?
铬 23,Windows。
我的任务是确定是否在用户附带的浏览器上安装并启用了 Java。
我正在navigator.javaEnabled()
为此使用方法。
除了 Chrome 浏览器外,它在任何地方都可以正常工作:即使 Chrome 上根本没有安装 Java 插件,它也会显示 TRUE。
这是错误还是功能?如何在 Chrome 中解决我的任务?
铬 23,Windows。
此问题已多次向 Chromium 项目报告:
前者是开放的,后者作为 WontFix 关闭。
社区中似乎对应该返回的值存在一些分歧:
目前还不清楚这里的正确行为是什么;它不是规范的一部分,MDN 中对预期行为的描述非常特定于一种偏好,这种偏好不仅在 Chrome 中不存在,而且在 Gecko 中也不再存在(因为它已被通用替换启用和禁用任意插件的能力)
看起来 Chrome 根据以下条件返回 true:
请注意,它明确表示它并没有指出是否实际支持 Java,只是表示首选项的值。因此,如果插件没有安装,因此用户没有明确禁用,那么根据这些文档,它实际上应该返回 true,而不是 false。我们将安装但禁用的插件视为未安装用于 Web 内容目的的插件。
强调我的
因此,我能想到的检测 Java 是否正在运行的唯一解决方案是在页面上实际放置一个 Applet,看看您是否可以通过 JavaScript 与它进行交互。
我添加了 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;
});
})();