2012-02-22 17 views
24

Javafx WebView内で実行されるjavascriptとhtmlをデバッグする方法はありますか? FirebugやChromeのデベロッパーコンソールに類似したものはありますか?JavaFX WebViewでのHTML/Javascriptデバッグ

私はFirefoxとChromeでうまくレンダリングするアプリケーションを持っていますが、WebView内では正しくレンダリングされません。それは本当にいくつでもありえますが、いくつかのデバッグツールがなければ根本原因を突き止める方法はわかりません。

ありがとうございました。

答えて

31

対象ページのhtmlを変更せずにJavaFX WebViewでFirebug Liteを使用するための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ボタンなどの任意のメカニズムを使用してコードをトリガーできます。

+4

Firebugを起動する前に、ドキュメントが読み込まれるまで待つ必要があります。それを行う方法については、jewelseaの回答を参照してください:http://stackoverflow.com/a/18396900/633107 – Splaktar

+0

console.log( "something")はあなたのために機能しますか? – ZiglioUK

+0

@ZiglioNZ新しい質問として新しい質問をしてください。 – jewelsea

4

多分答えが遅くなるかもしれませんが、私はこの方法がとても簡単だと思います。次に、JavaでJSリスナクラスを作成

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で

のJavaをJavaScriptのリスナーを追加します。

JSListenerのJava:あなたが外からHTMLをロードする場合、あなたは、あなたにそれを変更することはできません

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; 

public class JSListener { 

     public void log(String text){ 
    System.out.println(text); 
} 
} 

は、htmlファイルに

JavascriptをJavaScriptを追加しますこのようなコードを使用することができます。

var testsss = window.open("http://testError.com"); 
testsss.onerror = errorlistener; 

が、最初のあなたは、それはあなたがここで見ることができます作るために、JavaでsetCreatePopupHandlerを追加する必要があります。webview not opening the popup window in javafx

+0

申し訳ありません私の英語 – Haryanto

8

私はクロームデベロッパーツールとSafariのWebインスペクタでのJavaFXのWebViewをデバッグしています。

DevToolsでデバッグするのに役立つ最小限のプロジェクトを作成しました。 Get it on GitHub。サンプルは、WebViewのを開き、WebSocketをサーブレットを可能に作成したjavaFXWebKitDebugger.jar

  1. 実行可能javaFXWebKitDebugger.jar
  2. ソースコード:あなたはそこに見つけることができます。 javaFXWebKitDebugger.jarを実行すると、Chromeブラウザが開き、ロードされます。dev tools url

+0

あなたがそこで達成したことは本当に好きですが、廃止予定のAPIを使用しているようです。 – mohamnag

+1

このコードは、Googleドライブではなくgithubに配置してください。また、オープンソースライセンスの下でリリースしてください。 – Leonel

+0

@ bosko-popovicあなたはこのコードのライセンスの謎を解き放つことができますか?もっと使いやすくするためにGitHubでコードを再公開しましたが、ライセンスの定義を求めるリクエストが届いていますが、これは実際にあなたが応答するための決定です。ここをクリックしてください:https://github.com/mohamnag/javafx_webview_debugger/issues/1 – mohamnag

関連する問題