我的任務是確定在用戶附帶的瀏覽器上是否安裝並啓用了Java。如果在Windows上沒有爲Chrome 23安裝java插件,則navigator.javaEnabled()返回true
我對此使用navigator.javaEnabled()
方法。
除了Chrome瀏覽器以外,它能正常工作:即使Chrome上沒有安裝Java插件,它也會顯示TRUE。
這是錯誤還是功能? 我該如何解決我在Chrome中的任務?
Chrome 23,Windows。
我的任務是確定在用戶附帶的瀏覽器上是否安裝並啓用了Java。如果在Windows上沒有爲Chrome 23安裝java插件,則navigator.javaEnabled()返回true
我對此使用navigator.javaEnabled()
方法。
除了Chrome瀏覽器以外,它能正常工作:即使Chrome上沒有安裝Java插件,它也會顯示TRUE。
這是錯誤還是功能? 我該如何解決我在Chrome中的任務?
Chrome 23,Windows。
這個問題已經被報告多次到Chromium項目:
前者是開放的,後者封閉,WontFix。
似乎是在社會一些不同的意見的價值應該返回什麼:
這不是真的清楚這裏的正確的行爲;它不是規範的一部分,並且對MDN中預期行爲的描述是非常特定於一個首選項,該首選項不僅在Chrome中不存在,而且甚至不再存在於Gecko中(因爲它已被替換爲通用能力
它看起來像鉻返回true基於這些條件來啓用和禁用任意插件):
注意,它明確表示,它不指示的Java是否真正支持,只有pref的值。 因此,如果插件沒有安裝,因此沒有被用戶顯式禁用,那麼根據這些文檔,它應該實際返回true,而不是false。我們認爲已經安裝了一個插件,但完全禁用,就像沒有爲Web內容目的安裝插件一樣。
重點煤礦
因此,如果運行Java是真正把一個小程序在頁面上,看看你是否可以互動,我能想到的唯一的解決辦法來檢測與它來自JavaScript。
我添加了鍍鉻的解決方法:
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;
});
})();
我覺得這個API可以追溯到當時Netscape已經內置的Java支持。 –