2017-07-04 5 views
7

JavaFX WebViewでGoogleにサインインできません。 「次へ」ボタンをクリックするとページが読み込まれません。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); 
    } 
} 

Screenshot here

答えて

7

ショートバージョン:

ページをロードする前に、あなたのmainメソッドに次の行を追加します。

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

ロングバージョン:

私の最初の本能は、JavaScriptが働いていなかったが、私はダミーの電子メールをテストし、正しくエラーを得たということでした。

Couldn't find your Google Account

だから、それはいくつかのJavaScriptが働いていたように思えたが、ありませんユーザーは引き続きパスワードを入力することができました。私は、コンソールエラーをリッスンするwhich I found hereを以下のリスナーを追加しました:

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

これは、次のエラーが発生しました:

Console: [null:0] XMLHttpRequest cannot load https://ssl.gstatic.com/accounts/static/_/js/blahblahblah
Origin https://accounts.google.com is not allowed by Access-Control-Allow-Origin.

これはSame-Origin Policyと呼ばれるセキュリティ機能です。潜在的に悪質な第三者のWebサイトからスクリプトを読み込むことを可能にするページを停止するように設計されています。

私はあなたの問題を解決する "同じOrigin Policy JavaFX"とfound the following questionを検索しました。

修正と追加のログの両方で完全なアプリケーションは、次のとおりです。

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); 
    } 
} 
関連する問題