有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JavaFX WebView白色页面(未加载)

在填写了一些表格并在https://indianvisaonline.gov.in/visa/index.html上上传了一张照片后,我得到了一张白页。我使用JavaFX的WebView加载网站。在我按下照片上传按钮之前,一切正常

在其他浏览器中填写表单效果非常好,在Chrome、Firefox和Safari中也很成功。因此,我怀疑这是JavaFX的WebView所特有的

我试图通过只编写WebView部分来排除任何bug。然而,白色页面仍然显示

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 Lite进行测试

当嵌入Firebug时,会发生一些奇怪的事情。它没有显示空白的白色页面,而是将我重定向到主页。所以萤火虫在这里也帮不了我

调试

试图在我添加的日志中找到一些东西:-Djavax。网调试=全部。但是,这也不会返回任何错误(如HTTPS相关)

在这一点上,我很乐意接受任何建议


共 (1) 个答案

  1. # 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手动处理