【问题标题】:"document" is not defined in <eval> java ScriptEngine<eval> java ScriptEngine 中未定义“文档”
【发布时间】:2016-03-02 10:14:50
【问题描述】:

我正在尝试使用 scriptEngine 在 java 中调用文档,这是我的代码

     ScriptEngineManager scriptEngineManager=new ScriptEngineManager();
     ScriptEngine scriptEngine=scriptEngineManager.getEngineByName("nashorn");
    scriptEngine.eval("function func(){" +
    "document.location.href=someUrl;" +
                  "var text=document.getElementsByTagName('textarea')[0];"}"
                    );
            Invocable invocable= (Invocable) scriptEngine;
            ((Invocable) scriptEngine).invokeFunction("func");

抛出异常

javax.script.ScriptException: ReferenceError: "document" is not defined in <eval> at line number 1

【问题讨论】:

    标签: java javascript-engine


    【解决方案1】:

    Java 中的脚本引擎提供执行 Javascript 代码的能力,但不提供浏览器的模拟。

    documentwindow 和其他对象由浏览器定义,但不是 ECMAScript 规范 (http://www.ecma-international.org/ecma-262/5.1/#sec-15) 强制要求的对象。

    【讨论】:

    • 你不需要javascript来做到这一点。使用github.com/square/okhttphc.apache.org 等HTTP 客户端下载页面的原始HTML。但是,这不会像您在浏览器中所期望的那样为您提供页面的 DOM(您也不会在脚本引擎中获得)。要从原始 html 文本中获取 DOM,请检查例如 stackoverflow.com/questions/457684/…
    • 谢谢。我想以编程方式加载文档并为按钮添加 EventListener,这就是我使用 javascript 的原因。
    猜你喜欢
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多