JavaFX WebView 未执行 Ajax
JavaFX WebView not executing Ajax
我正在尝试在项目中使用 Dropbox Api,因此正在实施 OAuth 2.0 流程。我使用 JavaFX WebView 实现了整个流程,但我遇到了以下问题:
- 授权流程启动,一个带有 JavaFX WebView 的 window 弹出并导航到保管箱授权页面。
- 用户输入他的帐户信息并点击登录按钮
- 登录按钮旁边会出现一个小进度指示器,并且一直在旋转。
授权 url 如下:
https://www.dropbox.com/oauth2/authorize?client_id=<your-client-id>&response_type=token&redirect_uri=<redirect-url>
到目前为止我发现了什么:
- 我在浏览器中打开了授权 url 并检查了那里的登录按钮。事实证明,登录是通过 ajax-请求 (
<form action="/ajax_login" ... method="POST" ...>
) 处理的
- WebView 没有加载新页面(我有一个进度条在加载新页面时显示)
因此我认为网络视图根本不执行 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();
}
}
这不是直接的解决方案,但将来可能会对其他人有所帮助。事实证明,JavaFx WebView 在功能方面似乎落后了 (source) and official support has been dropped (source). I therefore switched to JxBrowser.
JxBrowser 默认是付费的,但他们对开源项目提供免费许可。由于许可和其他原因,JxBrowser 不如 WebView 好用,但由于它使用 Chromium,所以它在功能方面是最新的,soes 似乎没有这样的错误。
顺便说一句,我不以任何方式隶属于 TeamDev 或 JxBrowser,我只是在我的项目中使用它:)
我正在尝试在项目中使用 Dropbox Api,因此正在实施 OAuth 2.0 流程。我使用 JavaFX WebView 实现了整个流程,但我遇到了以下问题:
- 授权流程启动,一个带有 JavaFX WebView 的 window 弹出并导航到保管箱授权页面。
- 用户输入他的帐户信息并点击登录按钮
- 登录按钮旁边会出现一个小进度指示器,并且一直在旋转。
授权 url 如下:
https://www.dropbox.com/oauth2/authorize?client_id=<your-client-id>&response_type=token&redirect_uri=<redirect-url>
到目前为止我发现了什么:
- 我在浏览器中打开了授权 url 并检查了那里的登录按钮。事实证明,登录是通过 ajax-请求 (
<form action="/ajax_login" ... method="POST" ...>
) 处理的
- WebView 没有加载新页面(我有一个进度条在加载新页面时显示)
因此我认为网络视图根本不执行 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();
}
}
这不是直接的解决方案,但将来可能会对其他人有所帮助。事实证明,JavaFx WebView 在功能方面似乎落后了 (source) and official support has been dropped (source). I therefore switched to JxBrowser.
JxBrowser 默认是付费的,但他们对开源项目提供免费许可。由于许可和其他原因,JxBrowser 不如 WebView 好用,但由于它使用 Chromium,所以它在功能方面是最新的,soes 似乎没有这样的错误。
顺便说一句,我不以任何方式隶属于 TeamDev 或 JxBrowser,我只是在我的项目中使用它:)