有没有什么方法可以调试在Javafx WebView中执行的javascript和html?类似于Firebug或Chrome的开发者控制台?JavaFX WebView中的HTML/Javascript调试
我有一个应用程序在Firefox和Chrome中呈现良好,但在WebView内无法正确呈现。它确实可以是任何数量的东西,但是没有一些调试工具,我不知道如何找出根本原因。
谢谢。
有没有什么方法可以调试在Javafx WebView中执行的javascript和html?类似于Firebug或Chrome的开发者控制台?JavaFX WebView中的HTML/Javascript调试
我有一个应用程序在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或您希望的任何其他机制触发代码。
你可以试试Firebug Lite,它可以合并到任何网页浏览器中。请参阅http://www.makeuseof.com/tag/install-firebug-for-browsers-other-than-firefox/
也许有点晚回答,但我认为这种方式很简单。
添加JavaScript监听器在Java
的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;
但是首先你需要添加setCreatePopupHandler在Java中,使它可以在这里看到:webview not opening the popup window in javafx
对不起,我的英语 – Haryanto 2014-05-10 03:24:57
我调试了JavaFx的WebView铬DevTools和Safari Web检查。
我创建了最小的项目来帮助人们使用DevTools进行调试。 Get it on GitHub。你可以找到有:创建javaFXWebKitDebugger.jar
的
我真的很喜欢你在那里取得的成就,但看起来你正在使用一些弃用的API。 – mohamnag 2016-03-05 23:12:49
请将这段代码放在github上,而不是Google Drive。也请在一些开源许可下发布它。 – Leonel 2016-03-21 12:02:37
@ bosko-popovic你能解决这个代码的许可证的奥秘吗?我只是在GitHub上重新发布了你的代码以获得更好的使用,并且我得到了为它定义许可证的请求,但这实际上是你做出回应的决定。看看这里:https://github.com/mohamnag/javafx_webview_debugger/issues/1 – mohamnag 2016-04-11 11:50:46
您需要确保在启动Firebug之前等待文档加载。看到jewelsea的答案在这里如何做到这一点:http://stackoverflow.com/a/18396900/633107 – Splaktar 2013-11-01 19:17:02
console.log(“东西”)为你们工作? – ZiglioUK 2015-06-15 02:34:11
@ZiglioNZ请将新问题作为新问题提出。 – jewelsea 2015-06-15 17:12:45