繁体   English   中英

JavaFX WebView中的Html / Javascript调试

[英]Html/Javascript debugging in JavaFX WebView

有没有办法调试在Javafx WebView中执行的javascript和html? 类似于Firebug或Chrome的开发者控制台?

我有一个应用程序在Firefox和Chrome中渲染得很好,但在WebView中无法正确呈现。 它可能是任何数量的东西,但没有一些调试工具,我不知道如何追查根本原因。

谢谢。

下面是一些Java代码,可以在JavaFX WebView中使用Firebug Lite,而无需修改目标页面的html。

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');}"); 

您可以使用JavaFX Button或任何其他机制触发代码。

我正在使用chrome DevTools和safari Web Inspector调试JavaFx WebView。

我创建了最小的项目来帮助人们使用DevTools进行调试。 在GitHub上获取它 你可以在那里找到:

  1. runnable javaFXWebKitDebugger.jar
  2. 创建的javaFXWebKitDebugger.jar的源代码

该示例打开WebView并启用WebSocket Servlet。 当你运行javaFXWebKitDebugger.jar时,打开Chrome浏览器并加载: dev工具url

您可以尝试使用Firebug Lite,它可以合并到任何Web浏览器中。 请参阅http://www.makeuseof.com/tag/install-firebug-for-browsers-other-than-firefox/

也许回答有点晚,但我认为这种方式很简单。

在java中添加javascript侦听器

Java:

webengine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>() {
            @Override
            public void changed(ObservableValue<? extends State> observable,
                    State oldValue, State newValue) { 
                     JSObject jsobj = (JSObject) webengine.executeScript("window");                      
                     jsobj.setMember("java", new JSListener());  
            }
        });

然后在java中创建JS监听器类。

JSListener java:

public class JSListener { 

        public void log(String text){
    System.out.println(text);
} 
}

在html文件中添加javascript

使用Javascript:

var javaReady = function(callback){
    if(typeof callback =='function'){
        if(typeof java !='undefined'){
            callback();
        } else {
            var javaTimeout = 0;
            var readycall = setInterval(function(){
            javaTimeout++; 
                if(typeof java !='undefined' || javaTimeout > 1000){
                    try{
                        callback();
                    } catch(s){};
                    clearInterval(readycall);
                }
            },1);
        }
    }
};

            var errorlistener = function(msg, url, line){ 
            javaReady(function(){
            java.log(msg +", url: "+url+ ", line:" + line); 
            }); 
        };

      //overide onerror 
        var onerror = errorlistener;

如果你想从外面加载html,你不能改变它,你可以使用这样的代码。

var testsss =  window.open("http://testError.com");  
testsss.onerror = errorlistener;  

但首先你需要在java中添加setCreatePopupHandler,你可以在这里看到: webview没有在javafx中打开弹出窗口

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM