ReferenceError:未定义“警报”

Posted

技术标签:

【中文标题】ReferenceError:未定义“警报”【英文标题】:ReferenceError: "alert" is not defined 【发布时间】:2012-06-30 19:32:17 【问题描述】:

我正在尝试从 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 文件添加到我的类路径中。但这不起作用。

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

【问题讨论】:

【参考方案1】:

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

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

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

...然后在你的脚本中:

out.println('Hello from JavaScript');

...所以这是从脚本输出的第三种方法。 :-)

请参阅the javax.script package documentation 中的讨论,尤其是ScriptEngine#put,或者对于更复杂的情况,请参阅Bindings(和SimpleBindings)和ScriptContext

【讨论】:

就像使用 NodeJS 之类的东西一样,您可以执行代码,但由于您不是在浏览器中运行,因此您无法享受浏览器带来的好处,例如警告框。

以上是关于ReferenceError:未定义“警报”的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的 ReferenceError:未定义角度 - AngularJS 不工作

Node.js 警报导致崩溃

ReferenceError:未定义提取

未定义函数 - 未捕获的 ReferenceError

打字稿 - 未捕获的 ReferenceError:未定义导出

ReferenceError: $ 未定义