当前位置: 首页 > 知识库问答 >
问题:

无法在JavaFX WebView中登录Google

骆文彬
2023-03-14

我无法在JavaFX WebView中登录谷歌。当我单击“下一步”按钮时,页面未加载。

不同网站上的其他登录也可以。

这是一个您可以运行的示例

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);
    }
}

此处截图

共有1个答案

谷梁浩思
2023-03-14

简短版本:

在加载页面之前,将以下行添加到您的main方法中:

System.setProperty("sun.net.http.allowRestrictedHeaders", "true");

长版本:

我的第一反应是JavaScript不起作用,但我测试了虚拟电子邮件并正确地得到了错误:

找不到你的Google帐户

因此,看起来一些JavaScript正在工作,但不是让用户继续输入密码的部分。我添加了以下侦听器来侦听控制台错误,我在这里发现了这些错误:

com.sun.javafx.webkit.WebConsoleListener.setDefaultListener(
    (webView, message, lineNumber, sourceId) ->
        System.out.println("Console: [" + sourceId + ":" + lineNumber + "] " + message)
);

这导致以下错误:

控制台:[null:0]XMLHttpRequest无法加载https://ssl.gstatic.com/accounts/static/_/js/blahblahblah
起源https://accounts.google.com访问控制允许源不允许。

这是一种称为同源策略的安全功能。它旨在阻止页面从潜在的恶意第三方网站加载脚本

我搜索了“同源策略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);
    }
}
 类似资料:
  • 问题内容: 我无法使用JavaFX WebView登录到Google。当我单击“下一步”按钮时,该页面无法加载。 在不同网站上的其他登录也可以正常工作。 这是您可以运行的示例: 屏幕截图在这里 问题答案: 精简版: 在加载页面之前,将以下行添加到您的main方法中: 长版: 我的第一个直觉是JavaScript无法正常工作,但是我测试了伪邮件并正确地得到了错误: 找不到您的Google帐户 因此,

  • 我尝试使用这个简单的代码登录,但在我点击登录按钮后,else选项“无效用户名或密码!”总是出现,即使用户名和密码是匹配的 控制器:

  • 每当我试图打开 致命错误:未捕获错误:调用C:\xampp\htdocs\wordpress\wp includes\wp db中未定义的函数mysql\u connect()。php:1668堆栈跟踪:#0 C:\xampp\htdocs\wordpress\wp includes\wp db。php(632):wpdb- 致命错误:未捕获错误:调用C:\xampp\htdocs\wordpre

  • 错误描述:尝试登录时未显示任何内容。 我们输入用户(邮件)和密码,它试图登录,但什么也没发生。检查浏览器的控制台,但没有显示任何错误,甚至没有任何线索。 其他信息: PrestaShop版本:1.7.2 PHP版本:7.1.33 数据库客户端版本:libmysql-5.1.73 我们已经尝试过: > (!isset($this)- 在route/PROJECT_文件夹/classes/contro

  • 我试图通过本地主机上的JDBC连接到我的数据库。通过windows身份验证连接没有问题,但是我想通过SQL身份验证连接。因此,我在数据库中创建了一个登录名和与该登录名对应的用户。我可以正常登录SSMS: 我的 JDBC 连接字符串: 抛出异常: 用户名和密码与登录SSMS时使用的相同。 这里我的类代码:

  • 我一直在关注symfony网站上的教程(http://symfony.com/doc/current/security.html)为我的Symfony 3.1项目添加登录名。它可以与HTTP基本身份验证一起工作,但是当我使用这里的教程添加form_登录时(http://symfony.com/doc/current/security/form_login_setup.html)它会一直重定向到登录