2017-07-04 22 views
7

Tôi không thể đăng nhập vào Google trong JavaFX WebView. Trang không tải khi tôi nhấp vào nút 'Tiếp theo'.Không thể đăng nhập vào Google trong JavaFX WebView

Đăng nhập khác trên các trang web khác nhau hoạt động tốt.

Dưới đây là một ví dụ bạn có thể chạy:

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

Trả lời

7

Version viết tắt:

Thêm dòng sau vào phương pháp chính của bạn, trước khi bạn tải trang:

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

dài Version:

bản năng đầu tiên của tôi là JavaScript không hoạt động, nhưng tôi kiểm tra email giả và chính xác đã nhận lỗi:

Couldn't find your Google Account

Vì vậy, nó có vẻ giống như một số Javascript đang làm việc, nhưng không phải là một phần cho phép người dùng tiếp tục nhập mật khẩu của họ. Tôi thêm người nghe sau đây để nghe cho giao diện điều khiển lỗi, which I found here:

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

Điều này dẫn đến các lỗi sau:

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.

Đây là một tính năng bảo mật được gọi là Same-Origin Policy. Nó được thiết kế để ngăn các trang có thể tải tập lệnh từ các trang web độc hại của bên thứ ba.

Tôi đã tìm kiếm "Chính sách xuất xứ tương tự JavaFX" và found the following question sẽ giải quyết vấn đề của bạn.

Việc áp dụng đầy đủ với cả sửa chữa và khai thác gỗ thêm là:

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); 
    } 
} 
Các vấn đề liên quan