Вы можете получить список параметров командной строки через jjs -help
.
Я точно не знаю об удалении глобалов, но я сомневаюсь. Nashorn использует класс Global
, который представляет объект ECMAScript global
, как описано here.
ENGINE_SCOPE по умолчанию представляет собой обернутый экземпляр «глобального» объекта ECMAScript, который является «этим» в выражениях сценариев верхнего уровня. Таким образом, вы можете получить доступ к объектам верхнего уровня ECMAScript, таким как «Object», «Math», «RegExp», «undefined» из этого объекта области. Объект глобальной области Nashorn представлен внутренним классом реализации, называемым jdk.nashorn.internal.objects.Global.
Это Global
класс имеет кучу базовой ECMAScript водопровода запеченной в него в неизменном образом, как и без него Javascript просто не будет работать без каких-либо (Object
или Function
прототипов, например). Эта страница заявляет, что попытки использовать альтернативный объект в качестве глобального приведет к тому, что движок помещает ваш пользовательский «глобальный» объект в новый экземпляр Global
. Пытаться запустить Javascript без этого global
сантехника просто не сработает.
Теперь, если вы хотите ограничить классы 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-специфические классы в jdk.nashorn.api.scripting
пакете непосредственно.