2013-06-30 9 views
6

私はアプリケーションを開発しており、アプリケーションのWebView/WebEngineの部分でデバッガを実行する必要があるため、アプリケーションをよりよくデバッグすることができます。しかし、Firebug Liteをインジェクトするためにインターネット上で見つけたコードは何らかの理由で動作していません。JAVAFX/WebView/WebEngine FireBugLiteまたはその他のデバッガ?

Firefoxコンソールで実行するとJavascriptコード自体は正常に動作しますが、JavaFX webview/webengineで同じコードが実行された場合は正しく動作しません。 netbeansコンソールは他のエラーをスローしません...なぜ私はFirebugLite UIがレンダリング/ロードしていないのか分かりません。

これには何か他の選択肢がありますか?

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');}"); 
+0

私はJavaFX WebViewでDevToolsを使用する方法をこの[link](http://stackoverflow.com/a/34444807/1334241) –

答えて

16

私は//が動作しないのJavaFX 2.2

を使用してい

は....私は問題を解決することができました。 FirebugLiteの現在の安定版は従来のブラウザではうまく機能しているようですが、JAVAFX WebViewで表示されるアプリケーションでは失敗するものがあります。

私は解決策がどこから来FirebugLite

<script type='text/javascript' src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script> 

の非圧縮バージョンを使用して、自分のアプリケーションにFirebugのを追加することができた。私はすぐにデバッグする最善の方法というのJavaFXのWebViewで見つけTesting IE6 with Firebug Lite

+1

でお答えしました。1.2は、bootstrap.cssで私のために動作するFirebug Liteの最新バージョンです。通常のブラウザでも – ZiglioUK

+0

pure.cssと同じです。 1.2作品、1.3と1.4はしません。 – Norswap

+0

Wonderful ....... – repzero

2

Javascriptを次の操作を実行することでした。

ますので、コードのすべてのあなたの alert("whatever");の作品を通してパイプ
webView.getEngine().setOnAlert(new EventHandler<WebEvent<String>>() { 
    @Override 
    public void handle(WebEvent<String> event) { 
     System.out.println(event.getData()); 
    } 
}); 

何が起こっているか見ることができます。

14

あなたの質問にあなたが提供したコマンドは私のために働く(ほとんどの場合)。

Firebugをトリガーする前に、WebViewがドキュメントをロードするまで待機していない可能性があります。

たとえば、次のコードでFirebug Liteが起動します(JavaFX 8b103、OS X 10.8)。

Firebugのライト自体が(少なくとも私のWebViewの下で)Webページをデバッグする際に特に大きな思えませんdebugging

import javafx.application.Application; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.scene.Scene; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 
import javafx.stage.Stage; 
import org.w3c.dom.Document; 

public class WebViewWithDebugger extends Application { 
    public static void main(String[] args) { launch(args); } 
    @Override public void start(Stage primaryStage) { 
    final WebView webView = new WebView(); 
    final WebEngine engine = webView.getEngine(); 
    engine.load("http://docs.oracle.com/javafx/2/get_started/animation.htm"); 
    engine.documentProperty().addListener(new ChangeListener<Document>() { 
     @Override public void changed(ObservableValue<? extends Document> prop, Document oldDoc, Document newDoc) { 
     enableFirebug(engine); 
     } 
    }); 
    primaryStage.setScene(new Scene(webView)); 
    primaryStage.show(); 
    } 

    /** 
    * Enables Firebug Lite for debugging a webEngine. 
    * @param engine the webEngine for which debugging is to be enabled. 
    */ 
    private static void enableFirebug(final WebEngine engine) { 
    engine.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');}"); 
    } 
} 

。コンソール、html、css、およびdomパネルは、inspectオプションと同様に問題なく見えました。だからそこにいくつかの有用な情報。スクリプト部分にはスクリプトが示されていましたが、スクリプトではブレークポイントや時計などを設定することはできませんでした。

+0

最後にChangeListenerを追加することについてのヒントをいただきありがとうございます!他にもたくさんの例があります。この答えがあまりサポートされていないのは驚くべきことです。 – Splaktar

+4

上記のソリューションをJavaFXで試してみました。外部からロードされたURLで動作しましたが、ローカルファイルからロードされたURLは扱いませんでした。それらのファイルについては、これをローカルのhtmlファイルに追加しなければなりませんでした: ' ' –

+0

@DavemMご協力いただきありがとうございます。私の問題を解決! – schlimpf

関連する問題