#java #javascript #scriptengine
#java #javascript #scriptengine
Вопрос:
У меня есть 6 файлов js, и мне нужно включить их все в окончательный сценарий, чтобы передать метод eval ScriptEngine.Как я могу это сделать? В ScriptEngine нет метода add().Я могу прочитать их с помощью FileReader, а затем объединить эти строки, но я думаю, что есть способ получше.
Ответ №1:
Вы можете использовать перегрузку, eval(Reader)
чтобы избежать необходимости загружать скрипты в String
самостоятельно.
Комментарии:
1. У меня есть 6 файлов. И мне нужно добавить их все перед вызовом eval.
2. @Ademiban Ты не можешь вызвать eval() несколько раз?
3. Нет, некоторые из моих js-ов используют функции из других.
4. Вы были правы : D извините … если я вызываю eval несколько раз, ScriptEngine сохраняет функции и переменные из последних вызовов. спасибо ))
5. @shift66 можете ли вы вызвать одну js-функцию из другого файла, не могли бы вы, пожалуйста, опубликовать код.
Ответ №2:
Вы могли бы использовать один скрипт для вызова остальных 6 скриптов.
Пример:
function callOtherFunctions() {
functionOne();
functionTwo();
.
.
.
functionSix();
}
Не уверен на 100%, насколько хорошо это решение будет работать, но оно вызовет все остальные 6 функций.
Комментарии:
1. Вы не поняли мой вопрос.
Ответ №3:
Запустите eval несколько раз, используя один и тот же ScriptContext.
В следующем примере мне нужно запустить Utils.js скрипт перед запуском MainScript.js потому что Utils.js определяет ли некоторые функции, которые мне нужны в MainScript.js Я всегда думаю об этом порядке как о том, как эти скрипты будут отображаться на HTML-странице, которую я должен был выполнить в браузере:
String scriptsUtilsFilePath = "src/test/resources/scripts/Utils.js";
String mainScriptFilePath = "src/test/resources/scripts/MainScript.js";
// Get the script engine manager
ScriptContext newContext = new SimpleScriptContext();
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");// Newest Javascript engine
// Run Utils
engine.eval(new FileReader(scriptsUtilsFilePath), newContext);
// Run the Main Script
engine.eval(new FileReader(mainScriptFilePath), newContext);