的ReferenceError:未定义“警报”(ReferenceError: “alert” is

2019-06-25 21:37发布

我试图从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文件在我的课path.But这是行不通的。

我在没有得到如何解决这个错误。 请help.Thanks提前。

Answer 1:

alert是不是JavaScript的一部分,它的部分window通过Web浏览器提供的对象。 所以它不会在你试图使用它的上下文中。(这也是真正setIntervalsetTimeout ,等计时器相关的东西,仅供参考。)

如果你只想做简单的控制台输出,犀牛提供print功能脚本,所以你可以替换alertprint 。 您的脚本也可以访问所有的Java类和这样的,所以对实例的java.lang.System.out.println('Hello'); 想从你的JavaScript脚本工作(虽然这是一个有点多余与所提供的print功能)。 您也可以提供给你的脚本Java变量很容易地通过ScriptEngine.put ,如:

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

...然后在你的脚本:

out.println('Hello from JavaScript');

......所以这是从剧本做输出第三种方式。 :-)

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



文章来源: ReferenceError: “alert” is not defined