2010-05-03 93 views
1

基本上,我想找出在网页上检查用户JRE版本的最佳方法。我有一个JNLP文件的链接,如果用户的JRE版本是1.6或更高版本,我只想显示它。我一直在使用deployJava JavaScript代码(http://java.sun.com/javase/6/docs/technotes/guides/jweb/deployment_advice.html),并且已经在除Safari之外的每个浏览器中使用它(通过使用deployJava.versionCheck)。无论出于何种原因,Safari不会提供最新的JRE版本号 - 我通过显示getJREs()函数的值发现了这一点。我安装了1.6.0_20,这是显示在其他浏览器中,但Safari一直说目前只安装了1.5.0。我已经尝试使用createWebStartLaunchButtonEx()函数并指定'1.6.0'作为最低版本,但是当我单击按钮时(任何浏览器)都不会发生任何事情。检查浏览器内的JRE版本

有什么建议吗?

FYI:这里是我的代码 -

if (deployJava.versionCheck('1.6+')) { 
    var dir = location.href.substring(0,location.href.lastIndexOf('/')+1); 
    var url = dir + "tmaj.jnlp"; 
    deployJava.createWebStartLaunchButton(url, '1.6.0'); 
} else { 
    var noticeText = document.createTextNode("In order to use TMAJ, you must visit the following link to download the latest version of Java:"); 
    document.getElementById('jreNotice').appendChild(noticeText); 

    var link = document.createElement('a'); 
    link.setAttribute('href', 'http://www.java.com/en/download/index.jsp'); 
    var linkText = document.createTextNode("Download Latest Version of Java"); 
    link.appendChild(linkText); 
    document.getElementById('jreDownloadLink').appendChild(link); 
} 

回答

1

也许是最好的选择将是检查navigator.plugins阵列。

这是一个快速的例子,适用于Chrome/Firefox。据我所知,Internet Explorer不提供对插件数组的访问。

function getJavaVersion() { 
    var j, matches; 
    for (j = 0;j < navigator.plugins.length;j += 1) { 
     matches = navigator.plugins[j].description.match(/Java [^\d]+(\d+\.?\d*\.?\d*_?\d*)/i); 
     if (matches !== null) { 
      return matches[1]; 
     } 
    } 
    return null; 
}; 

console.log(getJavaVersion()); // => 1.6.0_16 
+0

这将是赌了一下,不是吗?我的意思是,它检查浏览器插件用于applet的Java版本,对吧?而不一定是运行独立/ webstart应用程序时使用的默认JRE版本? – aioobe 2010-05-04 09:52:02

+0

@aioobe - 整个目标是赌博,因为用户可能有多个JRE。 Java控制面板可让您为小应用程序和webstart应用程序设置不同的JRE。所以浏览器检查它永远不会是一个完美的科学。 OP应该仅仅依靠'JNLP'的最小JRE属性。 – Matt 2010-05-04 10:03:16

1

不知道,如果它可以帮助你,但你可以在JNLP文件的条款规定的最低JRE版本。如果不满足要求,Webstart不会启动您的应用程序。

查看标签。

而且,看看

How to check JRE version prior to launch?