【问题标题】:How can I detect the Java runtime installed on a client from an ASP .NET website?如何从 ASP .NET 网站检测客户端上安装的 Java 运行时?
【发布时间】:2009-01-29 13:14:57
【问题描述】:

我有一个托管 Java 小程序的 ASP .NET 网站。 Java 小程序需要 Java 运行时版本 1.6 Update 11。

如何检测客户端是否安装了适当的运行时,以便在未安装时显示信息性消息?

谢谢,

卡尔。

编辑:解决方案必须独立于平台。

【问题讨论】:

  • 在应用程序上同时使用 Java 和 .NET 不意味着世界将很快结束吗?如果我错了,请纠正我。

标签: java asp.net applet version-detection


【解决方案1】:

本页介绍了如何使用并列出了一些允许您使用 JavaScript 检测 Java 的插件:http://www.pinlady.net/PluginDetect/JavaDetect.htm

除此之外,也可以试试这个 sn-p:

if (navigator.javaEnabled()) {
    //Java is enabled
}

【讨论】:

  • 感谢您的回复,Dreas。 +1。 “JavaDetect”链接非常有用,这就是我实现的。我已经在 IE7 和 FF 3.05 中对此进行了测试,它运行良好且易于实现。
  • 而且它似乎与平台无关,因为它也适用于 Linux 的 FF
  • @R. Bemrose,我可能会接受这个答案,但是,我想为我的 Bounty 获得价值。 8)
【解决方案2】:

下面的链接详细介绍了 java 应用程序的部署技巧。

http://java.sun.com/javase/6/docs/technotes/guides/jweb/deployment_advice.html

引用链接

部署工具包 为避免浏览器兼容性问题,部署工具包 (deployJava.js) 提供 JavaScript 函数,可自动生成部署小程序和 Java Web Start 应用程序所需的 HTML。开发人员应该调用这些函数以在各种浏览器中以一致的方式部署他们的解决方案。

【讨论】:

    【解决方案3】:

    我的方法是使用 JavaScript navigator.javaEnabled() 检查是否有 一些 Java 版本可用。

    然后您可以在 Java 小程序本身中使用 System.getProperty("java.version")。这应该足以让您获得版本信息,例如1.6.0_03

    【讨论】:

    • 这听起来很有趣。我会调查的。 +1
    【解决方案4】:

    虽然到目前为止大多数答案都是围绕用户代理(浏览器)本身的检测,但从您提到的 ASP.NET 中听起来您希望在服务器端进行这种检测。如果是这样,您有几个选择。

    首先,您可以嗅探来自用户代理的 HTTP 请求标头。安装了 Java 的计算机和浏览器通常会包含一个标头,该标头向您可以获取的服务器提供此提示。以下是有关此方法的一些有用链接: http://www.developershome.com/wap/detection/ https://metacpan.org/pod/HTTP::Browscap

    您拥有的另一个选项是将 javascript 发送到用户代理,以使用此问题中其他答案中的一种技术执行检测,然后使用 ajax 回调告诉服务器您发现了什么。

    【讨论】:

    • +1 用于替代方法和链接 Andrew。谢谢。
    【解决方案5】:

    如果您不介意使用需要更旧版本才能运行的基本 Java 小程序,您可以使用 this article 并根据该结果继续操作。

    【讨论】:

      【解决方案6】:

      也许这个脚本会有所帮助。不过,这仅适用于 Windows。

      <script language='javascript' type='text/javascript'>
      var javaVersion;
      var shell;
      try 
      {
          // Create WSH(WindowsScriptHost) shell, available on Windows only
          shell = new ActiveXObject("WScript.Shell");
      
          if (shell != null) 
          {
              // Read JRE version from Window Registry
              try 
              {
                  javaVersion = shell.regRead("HKEY_LOCAL_MACHINE\\Software\\JavaSoft\\Java Runtime Environment\\");
              } 
              catch(e) 
              {
                  // handle exceptions raised by 'shell.regRead(...)' here
                  // so that the outer try-catch block would receive only
                  // exceptions raised by 'shell = new ActiveXObject(...)'
                  alert('error reading registry');
              }
          } 
      } 
      catch(e) 
      {
          // Creating ActiveX controls thru script is disabled 
          // in InternetExplorer security options 
      
          // To enable it: 
          // a. Go to the 'Tools --> Internet Options' menu
          // b. Select the 'Security' tab
          // c. Select zone (Internet/Intranet)
          // d. Click the 'Custom Level..' button which will display the
          // 'Security Settings' window.
          // e. Enable the option 'Initialize and script ActiveX controls
          // not marked as safe'
      
          activeXDisabled = true;
      } 
      
      // Check whether we got required (1.6) Java Plugin
      if ( javaVersion != null && javaVersion.indexOf("1.6")) 
      {
          pluginDetected = true;
          alert('it is installed!')
      }
      
      if (pluginDetected) 
      {
          // show applet page
      } 
      else if (confirm("Java Plugin 1.6 not found")) 
      {
          // show install page
          alert('not found')
      } 
      else 
      {
          // show error page
          alet('error')
      }
      </script>
      

      【讨论】:

      • 感谢 SquidScareMe 的回复,但我需要一个独立于平台的解决方案。我将编辑问题以规定这一点。
      • 我想了很多。对不起,我帮不上忙。不过祝你好运!
      • 如果你有一个允许创建 WScript.Shell 对象的环境,你可能有足够的控制权来强制推出 java
      【解决方案7】:

      如果解决方案必须独立于平台。我将排除 javascript 提供的所有解决方案。

      您可以编写一个非常简单的 Applet,它由老式的 Classic VM 支持。让小程序检测 JRE 版本,并显示消息。

      如果您接受 Javascript,您可能还会对 this article 感兴趣,它是关于 WebStart 应用程序的自动安装程序的。

      【讨论】:

      • Javascript 独立于平台。虽然不是独立于浏览器,但任何支持小程序的浏览器很可能也支持 javascript...
      【解决方案8】:
      1. 使用deployJava.js函数getJREs()根据用户的Java版本构建动态页面。

      2. 使用 http://cowwoc.blogspot.com/2008/12/tracking-java-versions-using-google.html 跟踪您的网络访问者使用 Google Analytics 使用的 Java 版本。

      3. 奖励步骤:使用来自step 2 的源代码作为如何实施步骤 1 的示例。

      【讨论】:

        【解决方案9】:

        只需复制并粘贴此代码到您的浏览器地址栏中! 检查它是否对您有用。

        javascript: for(i = 0; i < navigator.plugins.length; i++) alert(navigator.plugins[i].name);
        

        你需要获取 Java 在 plugins 数组中的位置,也许你可以用正则表达式或其他东西检查版本。您可以查看插件 javascript 对象。

        问候!

        【讨论】:

        • 所以他需要找到一种方法从服务器端代码中将某些内容粘贴到客户端的地址栏中?
        • @erikkallen:因为它是 javascript,所以只需创建一个函数并在您的代码中调用它。无法在 IE 中运行,但在 FF、Chrome 和 Opera 中运行。
        【解决方案10】:
        【解决方案11】:

        下面的链接是我让它工作的方式。它有一个你可以获得的 JS,它是为 Java 部署而制作的。上面提到了该链接,但我认为有一个示例会很好。

        这些是我最终需要解决我的问题的示例。

        http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/technotes/guides/jweb/deployment_advice.html#deplToolkit

        一旦你下载了 deployJava.js 文件,你可以放一些东西来确保 java 已经安装: if (deployJava.getJREs().length > 0) { //Your code to start java }

        确保安装了特定版本: if (deployJava.versionCheck(version)) { //Your version specific code }

        启动最新 Java 的安装程序: deployJava.installLatestJava();

        如果您愿意,也可以选择特定版本: deployJava.installJRE(version);

        【讨论】:

          【解决方案12】:

          复制粘贴到浏览器地址栏查看:

          javascript:alert(navigator.javaEnabled())

          适用于 Mozilla (FF3) 和 IE7。 (x64)

          【讨论】:

          • 那不给我运行时版本吗?
          • 不,它没有。 .NET CLR 可通过用户代理获得,但 JVM 详细信息不可用。我想这取决于您的环境,如果您控制它,请强制推出 Java。如果不是,您可能不得不对必须重定向到 java.sun.com 以进行更新的用户进行打击:o
          猜你喜欢
          • 1970-01-01
          • 2020-10-26
          • 1970-01-01
          • 2015-06-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-12
          • 1970-01-01
          相关资源
          最近更新 更多