私の仕事は、ユーザーが付属しているブラウザにJavaがインストールされ、有効になっているかどうかを確認することです。
私はnavigator.javaEnabled()
これにメソッドを使用しています。
Chromeブラウザを除いてどこでも問題なく動作します。ChromeにJavaプラグインがインストールされていなくてもTRUEと表示されます。
これはバグですか、それとも機能ですか?Chromeでタスクを解決するにはどうすればよいですか?
Chrome 23、Windows。
私の仕事は、ユーザーが付属しているブラウザにJavaがインストールされ、有効になっているかどうかを確認することです。
私はnavigator.javaEnabled()
これにメソッドを使用しています。
Chromeブラウザを除いてどこでも問題なく動作します。ChromeにJavaプラグインがインストールされていなくてもTRUEと表示されます。
これはバグですか、それとも機能ですか?Chromeでタスクを解決するにはどうすればよいですか?
Chrome 23、Windows。
この問題は、Chromiumプロジェクトに複数回報告されています。
前者は開いており、後者はWontFixとして閉じています。
価値が何を返すべきかについて、コミュニティにはいくつかの意見の相違があるようです。
ここでの正しい動作が何であるかは実際には明確ではありません。これは仕様の一部ではなく、MDNで予想される動作の説明は、Chromeに存在しないだけでなく、Geckoにも存在しないという設定に非常に固有です(汎用に置き換えられたため)任意のプラグインを有効または無効にする機能)
Chromeは次の条件に基づいてtrueを返すようです。
これは、Javaが実際にサポートされているかどうかを示すものではなく、設定の値のみを示していることに注意してください。したがって、プラグインがインストールされておらず、したがってユーザーによって明示的に無効にされていない場合、それらのドキュメントによれば、プラグインは実際にはfalseではなくtrueを返すはずです。また、プラグインをインストールしても無効にした場合は、Webコンテンツの目的でプラグインをインストールしない場合とまったく同じように扱います。
強調鉱山
したがって、Javaが実行されているかどうかを検出するために私が考えることができる唯一の解決策は、実際にアプレットをページに配置し、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;
});
})();