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 в мой путь к классу. Но это не работает.
Я не понимаю, как решить эту ошибку.
Пожалуйста, помогите. Спасибо заранее.
Ответы
Ответ 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
или для более сложных случаев Bindings
(и SimpleBindings
) и ScriptContext
.