Note: Advice in this article will only work for JxBrowser 6. See the corresponding article for JxBrowser 7 here.(注意:本文中的建议仅适用于JxBrowser6,JxBrowser7相应文章请点击这里。)


To handle pop-up windows in your JavaFX application you have two options:(要处理JavaFX应用程序中的弹出窗口,您有两个选择:)


1. Register default JavaFX pop-up handler implementation: (1.注册默认的JavaFX弹出处理程序实现:)

browser.setPopupHandler(new com.teamdev.jxbrowser.chromium.javafx.DefaultPopupHandler());

2. Register your own implementation where you decide how exactly you would like to display a new pop-up window: (2.注册您自己的实现,在其中决定要如何精确地显示新的弹出窗口:)

browser.setPopupHandler(new PopupHandler() {
    public PopupContainer handlePopup(PopupParams params) {
        return new PopupContainer() {
            public void insertBrowser(final Browser browser, final Rectangle initialBounds) {
                Platform.runLater(new Runnable() {
                    @Override
                    public void run() {
                        final Stage stage = new Stage();
                        StackPane root = new StackPane();
                        Scene scene = new Scene(root, 800, 600);
                        BrowserView browserView = new BrowserView(browser);
                        root.getChildren().add(browserView);
                        stage.setScene(scene);
                        stage.setTitle("Popup");
                        if (!initialBounds.isEmpty()) {
                            stage.setX(initialBounds.getLocation().getX());
                            stage.setY(initialBounds.getLocation().getY());
                            stage.setWidth(initialBounds.width);
                            stage.setHeight(initialBounds.height);
                        }

                        stage.setOnCloseRequest(new EventHandler<javafx.stage.WindowEvent>() {
                            public void handle(javafx.stage.WindowEvent event) {
                                browser.dispose();
                            }
                        });

                        browser.addDisposeListener(new DisposeListener<Browser>() {
                            public void onDisposed(DisposeEvent<Browser> event) {
                                Platform.runLater(new Runnable() {
                                    public void run() {
                                        stage.close();
                                    }
                                });
                            }
                        });
                        stage.show();
                    }
                });
            }
        };
    }
});