填写一些表格并在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相关)。
此时我对任何建议都很满意!
答案 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手动处理。