代码之家  ›  专栏  ›  技术社区  ›  vatbub

JavaFX WebView不执行Ajax

  •  0
  • vatbub  · 技术社区  · 7 年前

    我正在尝试在项目中使用Dropbox Api,因此正在实现OAuth 2.0流。我使用JavaFX WebView实现了整个流,但遇到了以下问题:

    1. 身份验证流启动后,会弹出一个带有JavaFX WebView的窗口,并导航到dropbox身份验证页。
    2. 用户输入他的帐户信息并点击登录按钮
    3. 登录按钮旁边会出现一个小进度指示器,并一直旋转。

    身份验证url如下:

    https://www.dropbox.com/oauth2/authorize?client_id=<your-client-id>&response_type=token&redirect_uri=<redirect-url>
    

    到目前为止我发现:

    • 我在浏览器中打开了auth url并检查了那里的login按钮。事实证明,登录是通过ajax请求处理的( <form action="/ajax_login" ... method="POST" ...> )
    • WebView不加载新页面(我有一个进度条,在加载新页面时显示)

    因此,我认为web视图根本不执行ajax调用。

    这是MCVE(你需要 register your own dropbox app 为了让它工作):

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.web.WebView;
    import javafx.stage.Stage;
    
    public class JavaFXWebViewAjaxIssue extends Application {
        public static void main(String[] args) {
            launch(args);
        }
    
        @Override
        public void start(Stage stage) {
    
            String clientId = ""; // Put your client id in
            String redirectURL = ""; // put your redirect url in
    
            String url = "https://www.dropbox.com/oauth2/authorize?client_id=" + clientId + "&response_type=token&redirect_uri=" + redirectURL;
    
            WebView webView = new WebView();
            webView.getEngine().load(url);
    
            final Scene scene = new Scene(webView);
            stage.setScene(scene);
            stage.show();
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   vatbub    7 年前

    这不是一个直接的解决方案,但它可能在未来帮助其他人。事实证明,JavaFx WebView在功能方面似乎落后了( source )官方的支持也被取消了( source ). 所以我改成 JxBrowser .

    默认情况下,JxBrowser是付费的,但他们会向开源项目授予免费许可证。由于许可和其他原因,JxBrowser不像WebView那么容易使用,但是由于它使用Chromium,它在功能方面是最新的,soe似乎没有像这样的bug。

    顺便说一句,我与TeamDev或JxBrowser没有任何关联,我只是在我的项目中使用它:)