首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个WebView组件,每个组件具有不同的会话

多个WebView组件,每个组件具有不同的会话
EN

Stack Overflow用户
提问于 2015-02-22 12:26:51
回答 1查看 2.5K关注 0票数 0

如何在同一服务器上拥有多个JavaFX WebView组件,每个组件都有自己的基于cookie的私有会话,例如来自具有多个选项卡的UI?

作为一个用例,运行以下SSCCE并从"Browser 1“选项卡登录到一个站点(我一直在使用https://mail.google.com/)。从"Browser 2“选项卡打开同一个站点,您将从"Browser 1”中看到会话。(注意:您必须输入完整地址,并使用协议前缀http:// -并按下"Go“按钮- enter将无法工作。)

编辑:使用engine.userDataDirectory属性的也不起作用。

代码语言:javascript
复制
import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import javafx.concurrent.Worker.State;

public class TwoBrowserTabs extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        TabPane tabPane = new TabPane();

        Tab tab1 = new Tab();
        tab1.setText("Browser 1");
        tab1.setContent(makeBrowserTab("browser1"));
        tabPane.getTabs().add(tab1);

        Tab tab2 = new Tab();
        tab2.setText("Browser 2");
        tab2.setContent(makeBrowserTab("browser2"));
        tabPane.getTabs().add(tab2);

        Scene scene = new Scene(tabPane);
        primaryStage.setTitle("Two browsers");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private Node makeBrowserTab(String identifier) {
        BorderPane borderPane = new BorderPane();
        TextField address = new TextField();
        HBox.setHgrow(address, Priority.ALWAYS);
        Button go = new Button();
        go.setText("Go");
        HBox hbox = new HBox();
        hbox.getChildren().add(address);
        hbox.getChildren().add(go);
        WebView browser = new WebView();
        browser.setPrefSize(960, 640);
        borderPane.setTop(hbox);
        borderPane.setCenter(browser);

        WebEngine engine = browser.getEngine();

        // EDIT: Does not work either
        engine.setUserDataDirectory(new File(System.getProperty("user.home") + File.separator + "TwoBrowserTabs" + File.separator + identifier));

        // Let the button reflect the state of the loader,
        // so as to have a minimalistic feedback.
        engine.getLoadWorker().stateProperty().addListener((ov, oldState, newState) -> {
            if( newState == State.READY || newState == State.SUCCEEDED ) {
                go.setDisable(false);
                go.setText("Go");
            }
            else if( newState == State.FAILED || newState == State.CANCELLED ) {
                go.setDisable(false);
                go.setText("Go (!)");
            }
            else {
                go.setDisable(true);
                go.setText("Go");
            }
        });

        go.setOnAction(event -> {
            engine.load(address.getText());
        });

        return borderPane;
    }

    public static void main(String[] args) {
        launch(args);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2015-02-26 07:20:56

我认为您可以从以下链接获得帮助:清除JavaFX WebView中的会话/缓存/cookie

另外,如果服务器部分在您的控制下,您可以在其中设置一些会话设置,以避免维护会话&您还可以阻止cookie存储在客户端。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28657783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档