当前位置: 首页 > 面试题库 >

ReferenceError:未定义“警报”

漆雕嘉平
2023-03-14
问题内容

我正在尝试从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的一部分,而是windowWeb浏览器提供的对象的一部分。所以它不会在你试图使用它的上下文中。(这也是真实的setIntervalsetTimeout和其他计时器相关的东西,仅供参考。)

如果您只想进行简单的控制台输出,Rhino会为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



 类似资料:
  • 问题内容: 我收到此错误消息, 这是我的标题。 以下是我的JavaScript代码 以下是HTML 我想在输入标签上显示日期选择器。 我正在使用Bootstrap V3.1。 问题答案: 在使用$或jQuery的脚本之前 添加jQuery库 , 以便可以在脚本中标识$。

  • 我在node.js中编译代码时出现了这个错误,我该如何修复它呢? RefernceError:未定义fetch 这就是我正在做的函数,它负责从特定的电影数据库中恢复信息。

  • 我试图显示一个关于成功promise的弹出式通知,但我一直收到“ReferenceError:doNotification未定义”。如果我在html中单击按钮时触发doNotification,它就会工作。我的电子邮件功能和控制台一样工作。日志将适当的参数打印到控制台。我不确定在我的电子邮件功能中调用doNotification时为什么会出现此错误?

  • 问题内容: 我有以下Angular函数: 但是无论何时调用此函数,我都会进入 控制台。有人可以帮助我了解我在做什么错吗? 问题答案: 可能您尚未向控制器注入服务。有几种方法可以做到这一点。 请阅读有关DI的参考。然后,它变得非常简单:

  • 我有问题回应我的研究,仍然没有什么请帮助我 代码: const{Client,RichEmbed}=require('discord.js')const discord=require('discord.js')) mc\node\u模块\discord。js\src\client\actions\MessageCreate。js:31:14)在目标上。单元在WebSocketManager上导出

  • ReferenceError:未定义测试 我被困在这里了。我该如何解决这个问题。还有一个问题。消化和摩卡有关系吗?请谁来帮我解决这个问题