Как заставить ScriptEngine запускать несколько файлов javascript?

#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);