我正在尝试执行一些包含文档对象的JS代码。 我已经使用过ScriptEngine,但是由于文档无法使用。
这是我的代码。
我们的项目是基于Spring xml的配置的,在我的一个api中,我通过传递html作为Application的构造函数来调用此JavaFx代码。
我们的要求是仅通过Java代码获取HTML元素的offsetHeight。
import { Resolver, GraphQLMiddlewareFunc } from "../types/graphql-utils";
export const createMiddleware = (
middlewareFunc: GraphQLMiddlewareFunc,
resolverFunc: Resolver
) => (parent: any, args: any, context: any, info: any) =>
middlewareFunc(resolverFunc, parent, args, context, info);
还有另一个类,该类调用此JavaFxApplication类并在其构造函数中传递html String。
package com.giddh.api.service;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.fxml.FXMLLoader;
import javafx.scene.Group;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class JavafxSample extends Application {
String html;
Integer footerHeight;
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(this.getClass().getResource("/import/sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 595, 842));
final WebView browser = new WebView();
final WebEngine webEngine = browser.getEngine();
Parameters parameters = getParameters();
String html = parameters.getRaw().get(0);
webEngine.loadContent(html, "text/html");
primaryStage.show();
webEngine.getLoadWorker().stateProperty().addListener(
new ChangeListener<Worker.State>() {
@Override
public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) {
if (newState == Worker.State.SUCCEEDED) {
Integer i = (Integer) webEngine.executeScript(
"var body = document.body, html = document.getElementById(\"Template-footer\"); " +
"Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html" +
".scrollHeight, html.offsetHeight )");
System.out.println("printing footer height == " + i);
}
}
});
}
public JavafxSample(String html) throws Exception {
this.html = html;
launch(html);
}
public JavafxSample() {
}
}
}
我无法关闭屏幕,也无法将JS的输出设置为 类变量。
有什么方法可以实现JS的输出值 并关闭此屏幕,然后转到带有值的呼叫方。