引用错误:“警报”未定义

ReferenceError: "alert" is not defined

本文关键字:未定义 警报 错误 引用      更新时间:2023-09-26

我正在尝试从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 !!!");
})();

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

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)

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

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

我不知道如何解决此错误。请帮忙。提前谢谢。

alert不是

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

如果你只想做简单的控制台输出,Rhino 为你脚本提供了一个print函数,所以你可以用print替换alert。您的脚本还可以访问所有 Java 类等,因此例如java.lang.System.out.println('Hello');可以从您的 JavaScript 脚本中工作(尽管它与提供的 print 函数有点多余)。您还可以通过ScriptEngine.put轻松地使Java变量可用于脚本,例如:

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

。然后在脚本中:

out.println('Hello from JavaScript');

。因此,这是从脚本进行输出的第三种方法。:-)

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