2013-06-30 7 views
6

Sto sviluppando un'applicazione e ho bisogno di eseguire un debugger sulla parte WebView/WebEngine dell'applicazione in modo da poter eseguire il debug della mia applicazione. Ma il codice che ho trovato su internet per iniettare Firebug Lite non funziona per qualche motivo.JAVAFX/WebView/WebEngine FireBugLite o qualche altro debugger?

Il codice Javascript funziona correttamente se lo eseguo su Firefox Console, ma non quando lo stesso codice viene eseguito tramite la webview/webengine JavaFX. La console netbeans non lancia altri errori ... quindi non sono sicuro del motivo per cui l'interfaccia utente FirebugLite non sta eseguendo il rendering/il caricamento.

Cosa potrebbe causare questo, altre alternative?

sto utilizzando JavaFX 2.2

// non funziona ....

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

Ho risposto a come utilizzare DevTools su JavaFX WebView in questo [collegamento] (http://stackoverflow.com/a/34444807/1334241) –

risposta

16

sono stato in grado di risolvere il problema. Sembra che l'attuale versione stabile di FirebugLite funzioni bene per i browser tradizionali, ma qualcosa di diverso lo rende un errore per un'applicazione vista da JAVAFX WebView.

sono stato in grado di aggiungere Firebug per la mia applicazione utilizzando una versione non compressa di FirebugLite

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

La soluzione è venuto da: Testing IE6 with Firebug Lite

+1

1.2 è l'ultima versione di Firebug lite che funziona per me con bootstrap.css, anche sui normali browser – ZiglioUK

+0

Lo stesso con pure.css; 1.2 opere, 1.3 e 1.4 no. – Norswap

+0

Wonderful ....... – repzero

2

ho trovato con il JavaFX Webview che il miglior modo di debug in fretta JavaScript è stato quello di effettuare le seguenti operazioni:

webView.getEngine().setOnAlert(new EventHandler<WebEvent<String>>() { 
    @Override 
    public void handle(WebEvent<String> event) { 
     System.out.println(event.getData()); 
    } 
}); 

che i tubi attraverso tutti i vostri alert("whatever"); pezzi di codice in modo da può vedere cosa sta succedendo.

14

Il comando che hai fornito nella tua domanda funziona per me (beh in gran parte).

Forse non stai aspettando che WebView abbia caricato un documento prima di provare a far scattare Firebug.

Ad esempio, il seguente codice avvierà Firebug Lite per me (JavaFX 8b103, OS X 10.8).

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

debugging

Firebug Lite per sé non sembra particolarmente grande a debug le pagine web (almeno in WebView per me). La console, i pannelli html, css e dom sembravano andare bene, così come l'opzione di controllo. Quindi alcune informazioni utili lì. La porzione di script mostrava gli script ma non vedevo comunque di impostare breakpoint, orologi, ecc negli script.

+0

Finalmente ha funzionato grazie al tuo suggerimento sull'aggiunta di ChangeListener! Così tanti altri esempi là fuori lasciano fuori quella parte. È sorprendente che questa risposta non abbia molto sostegno. – Splaktar

+4

Provato la soluzione di cui sopra con JavaFX - ha funzionato con url caricati esternamente, ma non url caricati da file locali. Per quei file, ho dovuto aggiungere questo al file html locale: ' ' –

+0

@DavemM grazie per il tuo utile commento. Risolto il mio problema! – schlimpf