Отладка HTML/Javascript в JavaFX WebView
Есть ли способы отладки javascript и html, которые выполняются в Javafx WebView? Что-то похожее на Firebug или консоль разработчика Chrome?
У меня есть приложение, которое отлично отлаживается в Firefox и Chrome, но не корректно отображается внутри WebView. Это действительно может быть любое количество вещей, но без некоторых инструментов отладки я не знаю, как отследить основную причину.
Спасибо.
Ответы
Ответ 1
Вот какой код Java использует Firebug Lite в JavaFX WebView без изменения 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 или любого другого механизма, который вы хотите.
Ответ 2
Я отлаживаю JavaFx WebView с помощью chrome DevTools и Safari Web Inspector.
Я создал минимальный проект, чтобы помочь людям отлаживать DevTools. Получить его на GitHub. Вы можете найти там:
- runnable javaFXWebKitDebugger.jar
- исходный код созданного javaFXWebKitDebugger.jar
Образец открывает WebView и включает WebSocket Servlet. Когда вы запускаете javaFXWebKitDebugger.jar, откройте браузер Chrome и загрузите: dev tools url
Ответ 3
Вы можете попробовать Firebug Lite, который можно включить в любой веб-браузер. См. http://www.makeuseof.com/tag/install-firebug-for-browsers-other-than-firefox/
Ответ 4
Может быть, немного поздно ответить, но я думаю, что этот путь довольно прост.
добавить слушателя 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());
}
});
Затем создайте класс JS-слушателя в java.
JSListener java:
public class JSListener {
public void log(String text){
System.out.println(text);
}
}
добавить javascript в html файл
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 не открывает всплывающее окно в javafx