Закрытие WebView без закрытия приложения - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь использовать JavaFX WebView для интеграции с Google Контактом для настольного приложения.Я могу получить authentication code, который необходим для дальнейшего получения access-token, refresh-token бла-бла-бла.
Теперь я хочу, чтобы пользователь закрыл WebView, но Application должен продолжаться впередтак как у меня есть другой способ закрыть Application.
, я не могу этого достичь, как только я закрою свой WebView весь Application выход.

Вот мой код и дайте мне знать, если я что-то упустил.

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class FeatureTester extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        WebView browser = new WebView();
        WebEngine webEngine = browser.getEngine();
        webEngine.load("google/oauth/url");
        webEngine.getLoadWorker()
                .stateProperty().addListener((ObservableValue<? extends Worker.State> observable, Worker.State oldValue, Worker.State newValue) -> {
                    if (newValue == Worker.State.SUCCEEDED) {
                        String result = (String) webEngine.executeScript("let urlParams = new URLSearchParams(window.location.search);let myParam='';myParam=urlParams.get('code');if(myParam){myParam.toString()}");
                        System.out.println("result:" + result);
                        if (result != null) {
                            webEngine.loadContent("Close the browser");
                        }
                    }
                }
                );
        StackPane root = new StackPane();
        root.getChildren().add(browser);
        primaryStage.setScene(new Scene(root, 600, 600));
        primaryStage.show();
    }

    public static void main(String[] args) {
        System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
        launch(args);
    }
}

PS: JavaScript, который пытается получить значение code строки запроса, будет работать только длямой случай, игнорируйте его или прокомментируйте, если это вызывает какие-либо проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...