ReferenceError:未定义“alert”

我试图从java代码调用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脚本文件:

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

但是当我运行驱动程序类的main方法时,它给出了如下错误:

 Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "alert" is not defined. (#2) in  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) 

我所知道的是它需要一些脚本引擎来执行它。

为此,我将rhino.jar文件添加到我的类路径中。但这不起作用。

我没有得到如何解决这个错误。 请帮忙。谢谢。

alert不是JavaScript的一部分,它是Web浏览器提供的window对象的一部分。 所以它在您尝试使用它的上下文中不存在。(对于setIntervalsetTimeout和其他与计时器相关的东西,FYI也是如此。)

如果您只想进行简单的控制台输出,Rhino会为您的脚本提供printfunction,因此您可以使用print替换alert 。 您的脚本也可以访问所有Java类等,例如java.lang.System.out.println('Hello'); 可以使用你的JavaScript脚本(虽然它提供的printfunction有点多余)。 您还可以通过ScriptEngine.put轻松地为脚本提供Java变量,例如:

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

…然后在你的脚本中:

 out.println('Hello from JavaScript'); 

…这是从脚本输出的第三种方式。 🙂

请参阅javax.script包文档中的讨论,特别是ScriptEngine#put ,或者更复杂的情况, Bindings (和SimpleBindings )和ScriptContext