2016-11-15 233 views
1

填寫完某些表單並在https://indianvisaonline.gov.in/visa/index.html上傳照片後,我會看到一個白頁。我使用JavaFX的WebView來加載網站。一切正常,直到我點擊照片上傳按鈕。JavaFX WebView白頁(未加載)

填寫表單與其他瀏覽器完美兼容,並且在Chrome,Firefox和Safari中取得成功。所以我懷疑這是JavaFX的WebView特有的東西。

我試圖通過只寫WebView部分排除任何錯誤。然而,白頁仍然顯示。

public class SimpleTest extends Application {
 
  
    public static void main(String[] args) {
   
     launch(args);
  
    }
 
  

@Override
  
public void start(Stage primaryStage) {
   
    WebView webView = new WebView();
   webView.getEngine().load("https://indianvisaonline.gov.in/visa/indianVisaReg.jsp");
 
   

    Scene scene = new Scene(webView);
   
    Stage stage = new Stage();
   
    stage.setScene(scene);
   
    stage.show();
  
    }
  
} 

JavaFX的WebEngine的HTML 5支持

我注意到,相比於其他瀏覽器缺乏HTML5的支持。 JavaFX的WebView(WebEngine)在555分中只有275分,而其他瀏覽器的分數更好。我覺得可以打破的東西是缺乏Web加密API,數據庫存儲,文件讀取或有限的ECMAScript 6支持。但我不知道如何測試這個?

測試Firebug的精簡版

當嵌入螢火蟲,一些奇怪的情況發生。它不是顯示空白的白頁,而是將我重定向到主頁。所以Firebug也無法幫助我。

調試

試圖找到我添加的日誌東西:-Djavax.net.debug =所有。但是,這不會返回任何錯誤(如HTTPS相關)。

在這一點上,我會很高興與任何意見!

回答

1

在使用JavaFX web視圖的一個項目,我們發現以下有用的:

webView.setContextMenuEnabled(true); 
    webView.getEngine().setOnError(event -> System.out.println(event.getMessage())); 
    webView.getEngine().setOnAlert(event -> System.out.println(event.getData())); 

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

    // Firebug lite 
    webView.getEngine().getLoadWorker().stateProperty().addListener(
      (ChangeListener<State>) (ov, oldState, newState) -> { 
       if (newState == Worker.State.SUCCEEDED) { 
        webView.getEngine().executeScript(
          "if (!document.getElementById('FirebugLite')){E = document['createElement' + 'NS'] && document.documentElement.namespaceURI;E = E ? document['createElement' + 'NS'](E, 'script') : document['createElement']('script');E['setAttribute']('id', 'FirebugLite');E['setAttribute']('src', 'https://getfirebug.com/' + 'firebug-lite.js' + '#startOpened');E['setAttribute']('FirebugLite', '4');(document['getElementsByTagName']('head')[0] || document['getElementsByTagName']('body')[0]).appendChild(E);E = new Image;E['setAttribute']('src', 'https://getfirebug.com/' + '#startOpened');}"); 
       } 
      }); 
    webView.getEngine().locationProperty().addListener(
      (observable, oldValue, newValue) -> System.out.println(newValue)); 

而且似乎其功能類似於網頁視圖瀏覽器Safari瀏覽器。如果某些東西在Safari上不起作用,它通常不會出現在Webview上。然而,Safari有更好的開發工具。

此外,您可能會注意打開新窗口的彈出窗口和網站,必須使用Webview手動處理。