JavaFX WebView白页(未加载)

时间:2016-11-15 22:06:29

标签: java javafx javafx-webengine

填写一些表格并在https://indianvisaonline.gov.in/visa/index.html上传照片后,我会看到一个白页。我使用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 Cryptography API,数据库存储,文件读取或有限的ECMAScript 6支持。但我不知道如何测试这个?

使用Firebug Lite进行测试

当嵌入Firebug时,会发生一些奇怪的事情。它不是显示空白页面,而是将我重定向到主页。所以Firebug也无法帮助我。

调试

尝试在我添加的日志中找到一些内容:-Djavax.net.debug = all。但是,这也不会返回任何错误(如HTTPS相关)。

此时我对任何建议都很满意!

1 个答案:

答案 0 :(得分:1)

在使用JavaFX Webview的项目中,我们发现以下内容非常有用:

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

此外,似乎与Webview类似的浏览器是Safari。如果某些东西在Safari上不起作用,它通常不在Webview上。然而,Safari有更好的开发工具。

此外,您可能会注意打开新窗口的弹出窗口和网站,这必须使用Webview手动处理。