Отладка HTML / Javascript в JavaFX WebView - PullRequest
27 голосов
/ 22 февраля 2012

Существуют ли способы отладки javascript и html, которые выполняются в Javafx WebView? Что-то похожее на Firebug или консоль разработчика Chrome?

У меня есть приложение, которое хорошо отрисовывается в Firefox и Chrome, но неправильно отрисовывается внутри WebView. Это может быть любое количество вещей, но без каких-либо инструментов отладки я не знаю, как отследить причину.

Спасибо.

Ответы [ 4 ]

33 голосов
/ 23 февраля 2012

Вот некоторый 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 или любого другого механизма, который вы используете.хочу.

10 голосов
/ 24 декабря 2015

Я отлаживаю JavaFx WebView с помощью Chrome DevTools и Safari Web Inspector.

Я создал минимальный проект, чтобы помочь людям отлаживать с DevTools. Получить его на GitHub .Здесь вы можете найти:

  1. исполняемый файл javaFXWebKitDebugger.jar
  2. исходный код созданного javaFXWebKitDebugger.jar

В примере открывается WebView и включается сервлет WebSocket.Когда вы запускаете javaFXWebKitDebugger.jar, открываете браузер Chrome и загружаете: url средств разработки

6 голосов
/ 23 февраля 2012

Вы можете попробовать Firebug Lite, который можно встроить в любой веб-браузер.Смотри http://www.makeuseof.com/tag/install-firebug-for-browsers-other-than-firefox/

4 голосов
/ 10 мая 2014

Может быть, немного поздно, чтобы ответить, но я думаю, что этот путь довольно прост.

добавить слушатель 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, чтобы сделать это, вы можете увидеть здесь: веб-просмотр не открывает всплывающее окно в javafx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...