web-dev-qa-db-ja.com

JavaFXWebViewでのHTML / Javascriptのデバッグ

Javafx WebView内で実行されるjavascriptとhtmlをデバッグする方法はありますか? FirebugやChromeの開発者コンソールに似たものはありますか?

FirefoxとChromeで正常にレンダリングされるアプリケーションがありますが、WebView内では正しくレンダリングされません。それは実際にはいくつもの可能性がありますが、いくつかのデバッグツールがないと、根本原因を突き止める方法がわかりません。

ありがとう。

27
mag382

これは、ターゲットページのhtmlを変更せずにJavaFXWebViewでFirebugLiteを利用するためのJavaコードです。

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ボタンまたはその他の任意のメカニズムを使用してコードをトリガーできます。

33
jewelsea

chrome DevToolsとsafariWebInspectorを使用してJavaFxWebViewをデバッグしています。

DevToolsでデバッグできるように最小限のプロジェクトを作成しました。 GitHubで入手 。あなたはそこに見つけることができます:

  1. 実行可能なjavaFXWebKitDebugger.jar
  2. 作成されたjavaFXWebKitDebugger.jarのソースコード

サンプルはWebViewを開き、WebSocketサーブレットを有効にします。 javaFXWebKitDebugger.jarを実行すると、開くChromeブラウザとロード: dev tools url

10
Bosko Popovic

Firebug Liteを試すことができます。これは、任意のWebブラウザーに組み込むことができます。 http://www.makeuseof.com/tag/install-firebug-for-browsers-other-than-firefox/ を参照してください。

6
Sergey Grinev

答えるのが少し遅いかもしれませんが、この方法は非常に簡単だと思います。

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がjavafxでポップアップウィンドウを開かない

4
Haryanto