代码之家  ›  专栏  ›  技术社区  ›  Fabio K

使用Java Nashorn引擎只验证javascript

  •  0
  • Fabio K  · 技术社区  · 6 年前

    早上好。

    我需要通过java运行javascript语法验证,但我正在努力寻找最佳解决方案。

    我用下面的方法和纳肖恩做了一些测试:

    try
    {
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
        Object retVal = engine.eval("findFieldValue(field);");
    }
    catch (ScriptException e)
    {
        response.put("status", "parseexception");
        response.put("msg", e.getMessage());
    }
    

    纳肖恩破例说 findFieldValue公司 领域 是未定义的,这是正确的。 我不需要这种验证。我只需要验证语法,就像Esprima JS API那样

    http://esprima.org/demo/validate.html

    我的问题是。我可以用Nashorn忽略语义验证,只验证语法吗?

    谢谢您!

    1 回复  |  直到 6 年前
        1
  •  2
  •   Jim Garrison    5 年前

    你在用 eval() 正如你可能猜到的,它试图 评价 表达方式。

    这个 NashornScriptEngine 工具 javax.script.Compilable 所以它提供了 compile() 方法。要使用它,你必须 engine 纳索恩脚本引擎 ,如

    NashornScriptEngine engine = (NashornScriptEngine) new ScriptEngineManager().getEngineByName("nashorn");
    

    你得到一个 ScriptException 如果编译失败。