2017-07-04 6 views
7

Ich kann mich nicht in JavaFX WebView bei Google anmelden. Die Seite wird nicht geladen, wenn ich auf die Schaltfläche "Weiter" klicke.Ich kann mich nicht in JavaFX WebView anmelden

Andere Logins auf verschiedenen Websites funktionieren gut. Hier

ist ein Beispiel Sie können laufen:

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

Antwort

7

Kurzfassung:

Fügen Sie die folgende Zeile in die Hauptmethode, bevor Sie die Seite laden:

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

Long Version:

Mein erster Instinkt war, dass JavaScript nicht funktioniert, aber ich Dummy-E-Mails getestet und bekam richtig den Fehler:

Couldn't find your Google Account

So ist es wie ein JavaScript schien funktioniert, aber nicht die Teil, mit dem der Benutzer weiterhin sein Passwort eingeben konnte. Ich fügte hinzu, die folgenden Hörer für Konsole Fehler zu hören, which I found here:

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

Dies führte zu dem folgenden Fehler:

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.

Dies ist eine Sicherheitsfunktion namens Same-Origin Policy. Es soll verhindern, dass Seiten Skripts von potenziell schädlichen Webseiten von Drittanbietern laden können.

Ich suchte nach "Same Origin Policy JavaFX" und found the following question, die Ihr Problem lösen wird.

Die vollständige Anwendung sowohl mit dem Update und der zusätzlichen Protokollierung ist:

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