JavaFX WebView 中的 HTML/Javascript 调试

IT技术 java javascript debugging webview javafx
2021-03-05 12:05:19

有什么方法可以调试在 Javafx WebView 中执行的 javascript 和 html?类似于 Firebug 或 Chrome 的开发者控制台?

我有一个在 Firefox 和 Chrome 中呈现良好的应用程序,但在 WebView 中无法正确呈现。它真的可以是任何数量的事情,但是如果没有一些调试工具,我不知道如何追查根本原因。

谢谢。

4个回答

下面是一些 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 按钮或您希望的任何其他机制来触发代码。

该网址不再起作用。另见stackoverflow.com/questions/58521474/...
2021-04-21 12:05:19
您需要确保在启动 Firebug 之前等待文档加载。请在此处查看jewelsea的答案以了解如何执行此操作:stackoverflow.com/a/18396900/633107
2021-04-26 12:05:19
@ZiglioNZ 请将新问题作为新问题提出。
2021-05-10 12:05:19

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

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

  1. 可运行的 javaFXWebKitDebugger.jar
  2. 创建的 javaFXWebKitDebugger.jar 的源代码

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

请将这段代码放在 github 而不是 Google Drive。另外请在一些开源许可下发布它。
2021-04-19 12:05:19
webEngine.impl_getDebugger() 似乎已被弃用,并且我在尝试运行该程序时发现 javafx.servlet.Servlet 的类未找到异常。有任何更新吗?
2021-04-21 12:05:19
@bosko-popovic 你能解开这个代码许可证的神秘面纱吗?我刚刚在 GitHub 上重新发布了您的代码以便更好地使用,并且我收到了为其定义许可证的请求,但这实际上是您做出回应的决定。看看这里:github.com/mohamnag/javafx_webview_debugger/issues/1
2021-04-26 12:05:19
此代码具有开源许可证依赖性。我很高兴我能在这方面帮助别人,因为我花了几天时间试图包含调试器。
2021-05-04 12:05:19
我真的很喜欢你在那里取得的成就,但似乎你正在使用一些已弃用的 API。
2021-05-06 12:05:19

您可以尝试 Firebug Lite,它可以集成到任何网络浏览器中。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 not open the popup window in javafx