使用JavaScript检测Java版本

15

是否有一种可靠的方法使用JavaScript检测客户端计算机上安装了哪个版本的Java?


在这里查看解决方案:http://www.spiration.co.uk/post/1186/Java%20detect%20brower,%20JVM%20vendor,%20Java%20version%20etc。非常好用(至少在本地机器上是这样,但我还没有在不同的环境中测试过)。 - user397112
7个回答

13

根据我们通过谷歌找到这个网页的事实,只是为了帮助下一位需要找这个答案的人。

Java是否已安装?

navigator.javaEnabled()

http://www.w3schools.com/jsref/met_nav_javaenabled.asp

安装了哪个版本的Java?

<script src="http://www.java.com/js/deployJava.js"></script>
<script>
var versions = deployJava.getJREs();
</script>

这里是我发现用JavaScript查找Java版本的最佳方式,但要小心使用,因为它的版本检测非常依赖于操作系统和浏览器,在旧浏览器版本或安装了旧版Java的最新浏览器上,它可能无法按预期工作。在正式使用之前请务必进行实际测试。


这并没有提供任何关于版本的信息(而问题就是关于版本的)。 - Felix Kling
这只是 Rich Apodaca先前的回答 的副本,丹的评论适用于它。 - T.J. Crowder
1
是的...只是让那些不理解他给出的页面上的所有内容或者链接失效的人更加明确,或者为了节省下一个通过谷歌找到这个页面的人的时间。我并不是想抄袭别人的好答案。 - sarlak
2
@T.J.Crowder 排名前0.02%的用户被一个第一次回答者在 Stack Overflow 的使互联网变得更好的哲学中教育。这是你每天都看不到的东西。 - Patrick McElhaney
除非在deployJava中将j大写,否则此代码无法正常工作,仅供参考。 - Christopher Bruce
显示剩余4条评论

12

1
如果有人再次遇到这个问题,请注意该工具包存在一个主要缺陷:它返回安装在计算机上的最高版本Java,而不是实际可运行的最高版本(至少在IE中)。具体来说,如果您同时安装了Sun JRE和MSJVM,则即使禁用了Sun JRE并且浏览器实际上运行MSJVM,该工具包也会报告Sun JRE版本。Adam Bellaire下面的链接似乎更可靠,尽管不太“干净”,因为它需要运行实际的小程序。 - Dan
更新:此链接已失效。看起来Adam Bellaire的链接将是要使用的链接。 - Ryan Kinal
此外,该方法使得在使用Sun JDK 1.6.0_2之前(具有中高安全设置)的MSIE7下弹出MSIE金色安全警告栏。请访问http://www.pinlady.net/PluginDetect获取一个不会引发安全警告(并且正在维护)的版本。 - Julien Kronegg

5

搜索以下内容:

使用JavaScript检测"Java版本"

会得到一些结果,这个链接看起来很有用。简而言之,它尝试加载一个Java小程序,然后JavaScript向该小程序询问。


24
具有讽刺意味的是,现在这个页面已经成为谷歌搜索“使用JavaScript检测Java版本”的第一个搜索结果。 - kingjeffrey

4

4

Java版本:

/**
 * @return NULL if not version found. Else return some things like: '1.6.0_31'
 */
var JavaVersion: function()
{
  var result = null;
  // Walk through the full list of mime types.
  for( var i=0,size=navigator.mimeTypes.length; i<size; i++ )
  {
      // The jpi-version is the plug-in version.  This is the best
      // version to use.
      if( (result = navigator.mimeTypes[i].type.match(/^application\/x-java-applet;jpi-version=(.*)$/)) !== null )
          return result[1];
  }
  return null;
}

Java和启用Java:

var IsJava: function()
{
  return typeof(navigator.javaEnabled) !== 'undefined' && navigator.javaEnabled();
}
这些函数适用于Opera、Firefox和Chrome浏览器。我没有IE浏览器。

JavaVersion在MSIE浏览器下无法工作,因为该浏览器的navigator.mimeTypes始终为空(已在MSIE7上测试)。 - Julien Kronegg
navigator.mimeTypes 在 IE11 中似乎存在。 - mopo922

1

检测逻辑在Windows7-64位的IE32上无法正常工作。它无法检测到之前安装的Java版本。

经过进一步阅读,发现Windows上的Java部署工具包使用ActiveX classid,这可能会使您的应用程序面临黑客攻击(请参见http://www.kb.cert.org/vuls/id/886582)。我退出了。


0
如果您使用Google Analytics,本帖可能会有所帮助(有关更多详细信息,请参见论坛帖子)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接