我如何确定 javascript 引擎、rhino 或 nashorn 是 运行 我的代码?
How can I determine which javascript engine, rhino or nashorn is running my code?
如何确定浏览器中的 javascript 引擎有几个问题。
我必须在 rhino 和 nashorn 上编写 javascript 必须 运行 的代码。
如何确定我的代码是 运行ning 在 rhino 还是 nashorn 上?是否有可以确定引擎的典型函数、变量、常量?
查看 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
。它确实涉及抛出异常,这是不幸的。
使用 --no-java 选项,"Java" 未在 Nashorn 中定义为对象。最好是检查 Nashorn 中始终可用的内容。 DIR 或 FILE 变量是一个很好的选择。永远在 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" 作为引擎名称。
如何确定浏览器中的 javascript 引擎有几个问题。 我必须在 rhino 和 nashorn 上编写 javascript 必须 运行 的代码。
如何确定我的代码是 运行ning 在 rhino 还是 nashorn 上?是否有可以确定引擎的典型函数、变量、常量?
查看 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
。它确实涉及抛出异常,这是不幸的。
使用 --no-java 选项,"Java" 未在 Nashorn 中定义为对象。最好是检查 Nashorn 中始终可用的内容。 DIR 或 FILE 变量是一个很好的选择。永远在 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" 作为引擎名称。