Подтвердить что ты не робот

ReferenceError: "alert" не определен

Я пытаюсь вызвать функцию java script из java-кода.

Вот мой код Java

    public static void main(String[] args) throws FileNotFoundException {
    try {
        /**
         * To call a anonymous function from java script file
         */
        ScriptEngine engine = new ScriptEngineManager()
                .getEngineByName("javascript");
        FileReader fr = new FileReader("src/js/MySpec.js");
        engine.eval(fr);

    } catch (ScriptException scrEx) {
        scrEx.printStackTrace();
    }
}

Вот мой файл java script:

(function() {
  alert("Hello World !!!");
})();

Но когда я запускаю основной метод класса драйвера, он дает мне ошибку, как показано ниже:

Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "alert" is not defined. (<Unknown source>#2) in <Unknown source> at line number 2
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:110)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:232)
at Java6RhinoRunner.load(Java6RhinoRunner.java:42)
at Java6RhinoRunner.main(Java6RhinoRunner.java:12)

Я знаю, что для его выполнения нужен какой-то механизм script.

Для этого я добавил файл rhino.jar в мой путь к классу. Но это не работает.

Я не понимаю, как решить эту ошибку. Пожалуйста, помогите. Спасибо заранее.

4b9b3361

Ответ 1

alert не является частью JavaScript, это часть объекта window, предоставляемого веб-браузерами. Таким образом, он не существует в контексте, в котором вы его используете. (Это также относится к setInterval, setTimeout и другим связанным с таймерам материалам, FYI.)

Если вы просто хотите сделать простой вывод консоли, Rhino предоставит print функцию script, поэтому вы можете заменить alert на print. Ваш script также имеет доступ ко всем классам Java и тому подобное, поэтому, например, java.lang.System.out.println('Hello'); будет работать из вашего JavaScript script (хотя он немного избыточен с предоставленной функцией print). Вы также можете легко использовать переменные Java для вашего script через ScriptEngine.put, например:

engine.put("out", System.out);

... и затем в script:

out.println('Hello from JavaScript');

... так что третий способ сделать вывод из script.: -)

См. обсуждение документации пакета javax.script, в частности ScriptEngine#put или для более сложных случаев BindingsSimpleBindings) и ScriptContext.