使用 Java 的 ScriptEngine 或 WebEngine 类调用 DOM 对象

Calling DOM objects using Java's ScriptEngine or WebEngine classes

本文关键字:调用 DOM 对象 WebEngine Java ScriptEngine 使用      更新时间:2023-09-26

是否可以使用 Java 中的 ScriptEngine 或 WebEngine 类修改 html 元素?我尝试了以下方法:

/* theSite is a WebEngine object. Assume the id 'Email' is correct */
Element email=(Element) theSite.executeScript("document.getElementById('Email');");
email.setAttribute( "value", "navon.josh" );

我在一个例子中看到过这样的东西,但它似乎不起作用。我也试过这个:

final ScriptEngineManager manager = new ScriptEngineManager();
final ScriptEngine engine = manager.getEngineByName( "js" );
try {
    engine.eval( "document.getElementById( 'Email' ).value = 'navon.josh'" );
} catch( ScriptException e) {
    e.printStackTrace();
}

这也行不通。是因为该语句未链接到WebEngine吗?

要访问加载到 JavaFX 2 WebView 中的 html 的 DOM 模型,您可以使用WebEngine API。 例如,下面是将侦听器添加到 HTML 文本区域的示例:

WebEngine webEngine = webView.getEngine();
webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>() {
  public void changed(ObservableValue ov, State oldState, State newState) {
    if (newState == Worker.State.SUCCEEDED) {
        // note next classes are from org.w3c.dom domain
        EventListener listener = new EventListener() {
            public void handleEvent(Event ev) {
                System.out.println(ev.getType());
            }
        };
        Document doc = webEngine.getDocument();
        Element el = doc.getElementById("textarea");
        ((EventTarget) el).addEventListener("keypress", listener, false);
    }
  }
});
webEngine.loadContent("<textarea id='textarea'></textarea>");

No. DOM 是浏览器的一部分,您没有浏览器。