2015-12-20 100 views
7

我想從Java執行JavaScript函數。我用下面的代碼段從java方法調用javaScript

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

但是,這將引發的alert()方法的異常?

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

嘗試'的eval( 「警報(\」 HI \ 「)」 );' –

回答

0

您無法以任何方式從java調用javascript。 JavaScript是其中的Java是在服務器上執行

更新客戶端的語言和瀏覽器上執行: - 謝謝你們我學到新的東西在這裏。

當我在運算執行的代碼,我得到以下錯誤

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的幫助下,我們可以調用基本的JavaScript,但我們不能使用Ÿ預定義的方法它會拋出一個異常,所以,如果你知道任何其他解決方案,請提供user3707125 –

+0

@AbhijitDesai請參閱我的更新 –

2

所以。我很確定你的代碼在這裏是不正確的。

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

試試。

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

除非你有一個變量HI聲明。

+0

你需要逃出各地喜 –

+0

引號,你可以請您給的鏈接在那裏我可以看到在java中使用js的一些示例/教程 –

-1

你是做了錯誤的方式,你無法從Java代碼,因爲一個是在客戶端執行,並在服務器端其他調用JavaScript函數......即使你做到這一點使用一些API它的代碼architecturing的錯誤方式。

+0

我的意思是,它與使用.Net調用powershell函數沒有什麼不同。或Sql語句... –

+0

服務器端腳本是一個優雅的事情,甚至可以是複雜的體系結構 – Marged

1

似乎「警報()」是由網絡瀏覽器所提供的窗口對象的一部分。 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