在Spring项目中关闭JAVAFx应用程序并返回其javascript输出

时间:2018-11-05 09:08:28

标签: javascript java html javafx javafx-webengine

我正在尝试执行一些包含文档对象的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的输出值 并关闭此屏幕,然后转到带有值的呼叫方。

0 个答案:

没有答案