有没有办法在Nashorn中删除对
的全局变量的访问权限$ENV=undefined
我做了一些搜索,但除了如何使用全局变量之外,我无法看到任何其他内容。
另外,是否有可以传递给脚本引擎的参数/标志列表?我目前正在做--no-java,但我无法在任何地方找到全面的列表。
感谢任何帮助。
答案 0 :(得分:1)
您可以通过jjs -help
获取命令行选项列表。
我不确定要删除全局变量,但我对此表示怀疑。 Nashorn使用代表ECMAScript Global
对象的global
类,如here所述。
默认上下文的ENGINE_SCOPE是ECMAScript的包装实例" global"对象 - 这是"这个"在顶级脚本表达式中。因此,您可以访问ECMAScript顶级对象,例如"对象","数学"," RegExp","未定义"来自此范围对象。 Nashorn全局范围对象由名为jdk.nashorn.internal.objects.Global的内部实现类表示。
Global
类有一堆基本的ECMAScript管道以不可变的方式加入其中,因为没有它,javascript根本不起作用(没有Object
或Function
例如原型)。该页面指出,尝试将替代对象用作全局将导致引擎放置您的自定义全局'将对象转换为新的Global
实例。尝试在没有global
管道的情况下运行Javascript根本不起作用。
现在,如果你想要做的是限制脚本可用的Java类,那就相对简单了(尽管不像我希望的那样简单)。
ClassFilter filter = new ClassFilter() {
@Override
public boolean exposeToScripts(String name) {
// This would disable all Java classes
return false;
}
};
ScriptEngine engine = new NashornScriptEngineFactory().getScriptEngine(filter);
这里的主要缺点是ClassFilter
和getScriptEngine(ClassFilter)
方法不是javax.scripting
API的一部分,您必须访问{中的Nashorn特定类{1}}直接打包。