【问题标题】:How can I determine which javascript engine, rhino or nashorn is running my code?如何确定哪个 javascript 引擎、rhino 或 nashorn 正在运行我的代码?
【发布时间】:2016-06-09 06:46:52
【问题描述】:

如何确定浏览器中的javascript引擎有几个问题。 我必须编写必须在 rhino 和 nashorn 上运行的 javascript 代码。

如何确定我的代码是在 rhino 还是 nashorn 上运行?是否有可以确定引擎的典型函数、变量、常量?

【问题讨论】:

  • 有趣。为什么需要支票?
  • 如果你问的是 rhino vs nashorn,你不只是问 JDK SE 8 vs >8 吗?
  • @JohnGreen: "...关于 JDK SE 8 vs >8?" Nashorn 是在 JDK8(不是 >8)中添加的。它是still possible to run Rhino in JDK8(但你必须添加一个罐子并故意这样做)。
  • 我们允许客户在那里设置最喜欢的引擎。我只是想知道设置了什么,没有人可以告诉我,他们做了什么。

标签: javascript rhino nashorn javascript-engine


【解决方案1】:

查看Rhino to Nashorn migration guide,我看到了几种可能的方法。

如果您不使用 Rhino 兼容性脚本,可以这样做:

var usingNashorn = typeof importClass !== "function";

...因为 importClass 是为 Rhino 定义的,但不是为 Nashorn 定义的(除非您包含兼容性脚本)。

认为 Java.type 是 Nashorn 特有的,所以:

var usingNashorn = typeof Java !== "undefined" && Java && typeof Java.type === "function";

您可以检查异常的包装:

var usingNashorn;
try {
    // Anything that will throw an NPE from the Java layer
    java.lang.System.loadLibrary(null);
} catch (e) {
    // false!
    usingNashorn = e instanceof java.lang.NullPointerException;
}

...因为迁移指南说 Nashorn 是 true 而 Rhino 是 false。它确实涉及抛出异常,这是不幸的。

【讨论】:

  • #2 是我的最爱。检查 Java 确实是在测试 Nashorn 功能。我不希望这会被添加到 Rhino 中。
【解决方案2】:

使用 --no-java 选项,“Java”未定义为 Nashorn 中的对象。最好的办法是检查 Nashorn 始终可用的东西。 DIRFILE 之类的变量是不错的选择。总是在 nashorn。

jjs> typeof DIR

字符串

如果您使用的是 javax.script API(而不是 jjs),您也可以获取引擎名称并进行检查:

import javax.script.*;

public class Main {
   public static void main(String[] args) throws Exception {
     ScriptEngineManager m = new ScriptEngineManager();
     ScriptEngine e = m.getEngineByName("nashorn");
     System.out.println(e.getFactory().getEngineName());
   }
}

使用 Nashorn,您会看到“Oracle Nashorn”作为引擎名称。

【讨论】:

  • 我们正在使用嵌入在 java 应用程序中的引擎。这是一项可以完全访问应用程序中的类的功能。
  • 好的。在这种情况下,我建议检查引擎名称为“Oracle Nashorn”。预计该名称对于 Nashorn 来说是稳定的。
猜你喜欢
  • 2016-05-04
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多