2010-05-03 121 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?