Закрытие WebView без закрытия приложения
Я пытаюсь использовать 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
Строка запроса будет работать только для моего случая, игнорировать ее или комментировать, если она вызывает какие-либо проблемы