有什么方法可以调试在 Javafx WebView 中执行的 javascript 和 html?类似于 Firebug 或 Chrome 的开发者控制台?
我有一个在 Firefox 和 Chrome 中呈现良好的应用程序,但在 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 按钮或您希望的任何其他机制来触发代码。
我正在使用 chrome DevTools 和 safari Web Inspector 调试 JavaFx WebView。
我创建了最小的项目来帮助人们使用 DevTools 进行调试。在 GitHub 上获取。你可以在那里找到:
该示例打开 WebView 并启用 WebSocket Servlet。当你运行 javaFXWebKitDebugger.jar 打开 Chrome 浏览器并加载:dev tools url
您可以尝试 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