簡體   English   中英

使用deployJava.js檢測java版本,彈出java升級菜單

[英]Detect java version using deployJava.js ,pops up java upgrade menu

我需要知道客戶端機器上安裝的java版本,在這里提出了解決方案

如何編寫JavaScript函數來檢查JRE版本

當我嘗試時,得到答案:

console.log(deployJava.getJREs());

但在地址欄中,彈出菜單顯示如下

在此輸入圖像描述

怎么隱藏這個?

如果無法實現,請提出任何其他想法,如果不禁止此彈出窗口,則無法使用

從最近的實驗中我很確定無法抑制它。 要使腳本檢測插件版本,它必須調用插件本身。


在那些實驗之后,我努力創建一個腳本,可以檢測有關Java插件的各種事情,而無需調用插件本身。 他們依靠檢查mime類型的信息。

如果從本地文件系統打開,這仍然在IE中顯示警告 但我希望如果從互聯網上加載它會更寬容。 請報告回來。

但請注意,當'允許腳本'檢查確定時,這是它為IE報告的內容。

關於Java的IE信息

HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Java Information - Non Deployment Toolkit Script</title>
<meta name='author' content='Andrew Thompson'>
<meta name='description' content='Non Deployment Toolkit Script'>
<script src='mimetypes.js'></script>
<style type='text/css'>
.true {
    background-color: #6F6;
}
.false {
    background-color: #FB0;
}
.undefined {
    background-color: #FF0;
}
.datum {
    font-family: monospace;
}

td {
    padding: 4px;
}
</style>
</head>
<body>

<h1>Java on this PC</h1>

<h2>Overview</h2>
<p>This page endeavors to ascertain the installation, availability
&amp; version of the Java installed on the client PC.
More importantly, it attempts to discover the information <b>without
invoking the Java Plug-In</b> itself.
The last part is what makes it different
to the Deployment Toolkit Script supplied by Oracle.
</p>

<script type='text/javascript'>

document.write("<h2>Browser Info.</h2>");
document.write(getBrowserInfo());


document.write("<h2>Basic Info.</h2>");
document.write("<table border='1'>");

document.write(get3CellRow('<b>Enabled</b>', isJava(), 'Java is enabled (1.1+) - IE info. (short of ActiveX) stops here'));
document.write(get3CellRow('<b>Version</b>', getVersion(), 'Maximum version reliably <em>known</em> to be available'));
if (isIE()) {
    document.write(get3CellRow('<b>MSIE</b>', getIEVersion(), 'Maximum version reliably known to be available in IE, tested using ActiveX'));
}
document.write(get3CellRow('<b>JWS</b>', isJWS(), 'Java Web Start available (1.4.2+)'));
document.write(get3CellRow('<b>Plug-In 2</b>', isPlugin2(), 'Plug-In 2 available (1.6.0_10+)'));

document.write("</table>");

if (plugins.length>0) {
    document.write("<h2>Navigator Plug-Ins</h2>");
    document.write("<table border='1'>");
    document.write("<tr><th>Name</th><th>Version</th><th>File Name</th><th>Description</th></tr>");
    for (var ii=0; ii<plugins.length; ii++) {
        var t = plugins[ii].name;
        if (t.indexOf("Java")>-1) {
            document.write("<tr>");
            document.write("<td>" + plugins[ii].name + "</td>");
            document.write(getDataStyledCell(plugins[ii].version));
            document.write("<td>" + plugins[ii].filename + "</td>");
            document.write("<td>" + plugins[ii].description + "</td>");
            document.write("</tr>");
        }
    }
    document.write("</table>");
}

if (mimes.length>0) {
    document.write("<h2>Navigator Mime-Types</h2>");
    document.write("<table border='1'>");
    document.write("<tr><th>Mime</th><th>Description</th><th>Types</th></tr>");
    for (var ii=0; ii<mimes.length; ii++) {
        var t = mimes[ii].type;
        if (t.indexOf("java")>0 &&
            ((t.indexOf("jpi")>0 || t.indexOf("deploy")>0 || t.indexOf("jnlp")>0 || t.indexOf("vm")>0) ||
            mimes[ii].description.length>0)
            ) {
            document.write("<tr>");
            document.write("<td>" + mimes[ii].type + "</td>");
            document.write("<td>" + mimes[ii].description + "</td>");
            document.write("<td>" + mimes[ii].suffixes + "</td>");
            document.write("</tr>");
        }
    }
    document.write("</table>");
}
</script>

<hr>

<h2>Description</h2>
<p>In order (if available) the information is:

<ul>
<li><b>Browser info. Table:</b>  Not strictly related to Java - the
information in the other tables is determined without
further reference to any information shown in this table (except for the <code>appName</code> used for
identifying IE).
OTOH it is an helpful guide
as to what we should be <em>expecting</em>
from the other information. E.G.  IE
will not show the Plug-In or Mime Type tables.  <em>Only</em>
FF displays the plug-in version numbers.
</li>
<li><b>Basic info. Table</b>
    <ul>
    <li><b>Enabled</b>:  Java is known to this browser and enabled, according to JavaScript <code>navigator.javaEnabled()</code>.</li>
    <li><b>Version</b>:  The maximum Java version known to be supported in this browser/PC.
    It is set to <code>1.1</code> if the previous check is <code>true</code>, since the MSVM
    was the first Java version the public could get in a browser, and the MSVM
    implemented Java 1.1.  Goes on to check
    <code>application/x-java-applet;jpi-version</code>
    in the mime types if available
    (i.e. typically browsers that are <em>not</em> IE).
    </li>
    <li><b>MSIE</b> (IE Only):  The maximum Java version known to be supported by this instance of Internet Explorer
    as determined using ActiveX.  It runs from 1.4.2, 1.5.0.. through 1.9.0.
    </li>
    <li><b>JWS</b>:
    Inferred from a comparison of the version to the Sun JRE in which
    it was co-bundled.</li>
    <li><b>Plug-In 2</b>:
    Inferred from a comparison of the version to the Sun JRE in which
    it was introduced.</li>
    </ul>
</li>
<li><b>Navigator Object Tables:</b>
    <em>The rest of the info. is gleaned from the <code>navigator</code> object.
    IE does not include this information.</em>
    <ul>
    <li><b>Plug-Ins</b>: More details of the Java related plugins.
    Filtered for <code>Java</code> in the <code>name</code>.
    A <code>description</code> showing "Next Generation Java Plug-in" or <code>name</code>
    "Java Deployment Toolkit" should be 1.6.0_10+.</li>
    <li><b>Mime-Types</b>: More information on the Java related Mime-Types.
    Filtered in <code>mime</code> field for <code>'java'</code> + <code>('jpi'||'vm'||'deploy')</code>
    or a non-empty <code>description</code>.
    The value <code>java-deployment-toolkit</code> in the <code>mime</code>
    is a good indicator of 1.6.0_10+.
    </li>
    </ul>
</li>
</ul>

</body>
</html>

mimetypes.js

// As a version string, this might be '1.4.2_31'.  
// I.E. it is not a 'number' but a 'string' and therefore must be treated as a string.
var highestVersion = 'undefined';

var mimes = window.navigator.mimeTypes;
var plugins = window.navigator.plugins; 

function isJava() {
    return (
        typeof(navigator.javaEnabled) !== 'undefined' &&
        navigator.javaEnabled());
}

function getVersion() {
    var version = 0;
    if (isJava()) {
        version = 1.1;
    }
    for (var ii=0; ii<mimes.length; ii++) {
        var t = mimes[ii].type;
        if (t.indexOf("java")>0 &&
            t.indexOf("jpi")>0 &&
            t.indexOf("applet")>0
            ) {
            var parts = t.split("=");
            version = parts[parts.length-1];
        }
    }
    if (highestVersion=='undefined') highestVersion = version;
    return version;
}

function isJWS() {
    var ver = highestVersion;
    var className = false;
    if (ver>'1.0') {
        className = undefined;
    }
    if (ver>'1.4.2') {
        className = true;
    }
    return className;
}

function isPlugin2() {
    var ver = highestVersion;
    var className = false;
    if (ver>'1.0') {
        className = undefined;
    }
    if (ver>'1.6.0_10') {
        className = true;
    }
    return className;
}

var versionFamily = [
    '1.9.0', '1.8.0', '1.7.0',
    '1.6.0', '1.5.0', '1.4.2'
];

function getIEVersion() {
    for (var i=0; i<versionFamily.length; i++) {
        if  (testUsingActiveX(versionFamily[i])) {
            return versionFamily[i];
        }
    }   
    return false;
}

if (isIE() && getVersion()=='1.1') {
    highestVersion = getIEVersion();
}

function isIE() {
    return navigator.appName=='Microsoft Internet Explorer';
}

function testUsingActiveX(version) {
    var objectName = 'JavaWebStart.isInstalled.' + version + '.0';

    // we need the typeof check here for this to run on FF/Chrome
    // the check needs to be in place here - cannot even pass ActiveXObject
    // as arg to another function
    if (typeof ActiveXObject == 'undefined' || !ActiveXObject) {
        alert('[testUsingActiveX()] Browser claims to be IE, but no ActiveXObject object?');
        return false;
    }

    try {
        return (new ActiveXObject(objectName) != null);
    } catch (exception) {
        return false;
    }
}

function get3CellRow(cell1, cell2, cell3) {
    var s = "" +
        "<tr>" +
        "<td class='" +
        getClassName(cell1) +
        "'>" +
        cell1 +
        "</td>" +
        getDataStyledCell(cell2) +
        "<td class='" +
        getClassName(cell3) +
        "'>" +
        cell3 +
        "</td>" +
        "</tr>" +
        "";

    return s;
}

function getDataStyledCell(value) {
    var s = "<td class='datum " +
        getClassName(value) +
        "'>" +
        value +
        "</td>";

    return s;
}

function getClassName(val) {
    var className = undefined;

    if (
        (val) ||
        (!val) ||
        (val!=="undefined")
        ) {
        className = val;
    }

    return className;
}

function getBrowserInfo() {
    var s = "";

    var props = [
        'appCodeName','appName','appVersion',
        'userAgent',
        'platform','cookieEnabled'
    ];

    s += "<table border='1'>";
    for (var i=0; i<props.length; i++) {
        s+= "<tr>";
        s+= "<td><b>";
        s+= props[i];
        s+= "</b></td>";
        s+= "<td>";
        s+= navigator[props[i]];
        s+= "</td>";
        s+= "</tr>";
    }
    s += "</table>";

    return s;
}

請注意(警告)這個腳本是由Java程序員編寫的。 Java編程人員通常是編寫JS 的全球絕對最差的人 ,因為我們愚蠢地傾向於推測。 “這是JavaScript,它有多難?”

寫出非常好的 JavaScript確實是一門藝術。

更糟糕的是,這是實驗性代碼被“黑客攻擊”,意圖后來改進它,但該項目被放棄,“后來”從未到來。

買者自負。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM