2015-12-20 5 views
7

Я хочу выполнить функцию JavaScript из Java. Я использовал следующий кусок кодавызов javaScript из метода java

ScriptEngineManager manager = new ScriptEngineManager();  
ScriptEngine engine = manager.getEngineByName("JavaScript"); 

, но это бросает исключение для метода alert()?

engine.eval("alert('HI');"); 
+0

Try 'Eval ("предупреждение (\" HI \ ")"); ' –

ответ

0

Вы не можете позвонить javascript из java в любом случае. Javascript это язык на стороне клиента и выполняется в браузере, где, как Java выполняется на сервере

Update: - Спасибо, ребята я узнал что-то новое.

, когда я выполнить код в оп я получаю ниже ошибки

Error executing script: ReferenceError: "alert" is not defined in <eval> at line number 1 

Причина предупреждения не является частью JavaScript, это часть оконного объекта, предоставленной веб-browsers.so, Nashhorn JavaScript двигателя не знает об этом.

Пожалуйста, см ReferenceError: "alert" is not defined

+0

Это возможно через API-интерфейс сценариев, который использует OP: https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/api.html – user3707125

+0

с помощью скриптов api we может вызвать базовый javascript, но мы не можем использовать y предопределенный метод, он выдаст исключение, поэтому, если вы знаете какое-либо другое решение, пожалуйста, предоставьте user3707125 –

+0

@AbhijitDesai Пожалуйста, см. мое обновление –

2

Зв Я уверен, что ваш код здесь неверен.

engine.eval("alert(HI);"); 

Попробуйте.

engine.eval("alert('Hi');"); 

, если у вас нет переменной HI.

+0

Вам нужно избегать цитат вокруг Hi –

+0

, можете ли вы указать ссылку, где я могу см. некоторые примеры/учебники по использованию js в java –

-1

Вы делаете это неправильно, вы не можете вызывать функцию JavaScript из java-кода, потому что один выполняется на стороне клиента и на другой стороне сервера ... даже если вы достигнете этого, используя некоторый API, это неправильный способ построения кода ,

+0

Я имею в виду, что это ничем не отличается от вызова функций powershell с .Net. Or Sql ... –

+0

Сценарий Serverside - элегантная вещь и может быть даже сложной архитектурой – Marged

1

Похоже, что «alert()» является частью объекта окна, предоставляемого веб-браузерами. it doesn't exist here

Я изменил код Java:

ScriptEngineManager manager = new ScriptEngineManager();  
ScriptEngine engine = manager.getEngineByName("JavaScript"); 
engine.eval("print('HI');"); 

Это полезно: Java Scripting Programmer's Guide
Информация о javscript окне объекта: The Window Object

Смежные вопросы