参考错误:“警报”未定义

问题描述 投票:0回答:2

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

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

java javascript rhino
2个回答
48
投票

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

如果您只想进行简单的控制台输出,Rhino 为您的脚本提供了

print
函数,因此您可以将
alert
替换为
print
。您的脚本还可以访问所有 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


0
投票

alert(“世界你好!”); ^

ReferenceError:警报未定义 在对象。 (E:\ABDUL REHMAN FILE\终极 javascript 课程\Conditional.js:5:5) 在Module._compile(节点:内部/模块/cjs/loader:1368:14) 在 Module._extensions..js (节点:内部/模块/cjs/loader:1426:10) 在Module.load(节点:内部/模块/cjs/loader:1205:32) 在 Module._load (节点:内部/模块/cjs/loader:1021:12) 在 Function.executeUserEntryPoint [作为 runMain] (节点:内部/模块/run_main:142:12) 在节点:内部/主/run_main_module:28:49

Node.js v21.7.1

© www.soinside.com 2019 - 2024. All rights reserved.