【问题标题】:calling javaScript from java method从 java 方法调用 javaScript
【发布时间】:2016-03-26 19:05:26
【问题描述】:

我想从 Java 执行 JavaScript 函数。我使用了以下代码

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

但这会引发alert() 方法的异常?

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

【问题讨论】:

  • 试试eval("alert(\"HI\")");

标签: javascript java


【解决方案1】:

您不能以任何方式从 java 调用 javascript。 javascript 是客户端语言,在浏览器上执行,而 java 在服务器上执行

更新:- 谢谢大家,我在这里学到了一些新东西。

当我在 op 中执行代码时出现以下错误

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

原因是 alert 不是 JavaScript 的一部分,它是 web 浏览器提供的窗口对象的一部分。所以,Nashhorn javascript 引擎不知道它。

请看ReferenceError: "alert" is not defined

【讨论】:

  • 可以通过 OP 使用的脚本 API:docs.oracle.com/javase/8/docs/technotes/guides/scripting/…
  • 在脚本 API 的帮助下,我们可以调用基本的 javascript,但我们不能使用任何预定义的方法,它会引发异常,所以如果您知道任何其他解决方案,请提供 user3707125
【解决方案2】:

所以。我很确定您的代码不正确。

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

试试吧。

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

除非你声明了一个变量 HI。

【讨论】:

  • 你需要对 Hi 周围的引号进行转义
  • 能否给个链接,我可以看到一些在java中使用js的例子/教程
【解决方案3】:

你做错了,你不能从 java 代码中调用 JavaScript 函数,因为一个在客户端执行,另一个在服务器端执行……即使你使用某些 API 实现了这一点,它也是错误的代码架构方式。

【讨论】:

  • 我的意思是这与使用 .Net 调用 powershell 函数没有什么不同。或者 Sql 语句...
  • 服务器端脚本是一个优雅的东西,甚至可以是复杂的架构
【解决方案4】:

“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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多