Dar*_*ros 7 java javafx webview webengine
我无法在JavaFX WebView中登录Google.单击"下一步"按钮时,页面无法加载.
其他网站上的其他登录工作正常.
以下是您可以运行的示例:
import javafx.application.Application;
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 App extends Application
{
@Override
public void start(Stage primaryStage) throws Exception
{
WebView browser = new WebView();
WebEngine webEngine = browser.getEngine();
webEngine.load("https://calendar.google.com");
StackPane root = new StackPane();
root.getChildren().add(browser);
primaryStage.setScene(new Scene(root, 600, 600));
primaryStage.show();
}
public static void main(String[] args)
{
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
精简版:
在加载页面之前,将以下行添加到main方法:
System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
Run Code Online (Sandbox Code Playgroud)
长版:
我的第一直觉是JavaScript没有工作,但我测试了虚拟电子邮件并正确地得到了错误:
找不到您的Google帐户
所以似乎有些JavaScript正在运行,但不是让用户能够继续输入密码的部分.我添加了以下监听器来监听控制台错误,我在这里找到:
com.sun.javafx.webkit.WebConsoleListener.setDefaultListener(
(webView, message, lineNumber, sourceId) ->
System.out.println("Console: [" + sourceId + ":" + lineNumber + "] " + message)
);
Run Code Online (Sandbox Code Playgroud)
这导致以下错误:
控制台:[null:0] XMLHttpRequest无法加载 https://ssl.gstatic.com/accounts/static/_/js/blahblahblah Access-Control-Allow-Origin不允许
来源https://accounts.google.com.
这是一个名为Same-Origin Policy的安全功能.它旨在阻止页面能够从潜在的恶意第三方网站加载脚本.
我搜索了"同源策略JavaFX"并找到了以下问题来解决您的问题.
具有修复和附加日志记录的完整应用程序是:
public class CalendarController extends Application
{
@Override
public void start(Stage primaryStage) throws Exception
{
WebView browser = new WebView();
WebEngine webEngine = browser.getEngine();
com.sun.javafx.webkit.WebConsoleListener.setDefaultListener(
(webView, message, lineNumber, sourceId)-> System.out.println("Console: [" + sourceId + ":" + lineNumber + "] " + message)
);
webEngine.load("http://calendar.google.com");
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1985 次 |
| 最近记录: |