2017-07-04 81 views
7

Google'da JavaFX WebView'da oturum açamıyorum. 'İleri' düğmesini tıkladığımda sayfa yüklenmiyor.JavaFX WebView'da oturum açılamıyor WebView

Farklı web sitelerindeki diğer girişler iyi çalışıyor.

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

cevap

7

Kısa Versiyon: Eğer sayfayı yüklemek önce

, ana yönteme aşağıdaki satırı ekleyin:

İşte

çalıştırabileceğiniz bir örnektir
System.setProperty("sun.net.http.allowRestrictedHeaders", "true"); 

Uzun Versiyon:

Benim ilk içgüdüsü JavaScript çalışma değildi, ama kukla e-postaları test edilmiş ve doğru bir şekilde hata var:

Couldn't find your Google Account

Yani bazı JavaScript gibi görünüyordu çalışıyordu, ancak Kullanıcının şifrelerini girmeye devam etmesini sağlayan bölüm. Ben, konsol hataları dinlemek için which I found here aşağıdaki dinleyici ekledi:

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

Bu aşağıdaki hata ile sonuçlandı:

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.

Bu Same-Origin Policy adında bir güvenlik özelliğidir. Sayfaların, olası kötü amaçlı üçüncü taraf web sitelerinden komut dosyalarını yükleyebilmesini sağlamak için tasarlanmıştır.

"Aynı Kaynak İlkesi JavaFX" ile sorununuzu çözecek found the following question'u aradım.

düzeltme ve ek günlük, her iki tam uygulama:

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