2013-06-30 6 views
6

Ich entwickle eine App und muss einen Debugger auf dem WebView/WebEngine Teil der Anwendung ausführen, damit ich meine Anwendung besser debuggen kann. Aber der Code, den ich über das Internet gefunden habe, um Firebug Lite zu injizieren, funktioniert aus irgendeinem Grund nicht.JAVAFX/WebView/WebEngine FireBugLite oder ein anderer Debugger?

Der Javascript-Code selbst funktioniert einwandfrei, wenn ich ihn in der Firefox-Konsole ausführe, aber nicht, wenn der gleiche Code über die JavaFX-Webansicht/webengine ausgeführt wird. Die Netbeans-Konsole wirft keine anderen Fehler auf ... daher bin ich mir nicht sicher, warum die FirebugLite-Benutzeroberfläche nicht rendert/geladen wird.

Was könnte das verursachen, irgendwelche anderen Alternativen?

Ich bin mit JavaFX 2.2

// Funktioniert nicht ....

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

Ich antwortete, wie DevTools auf JavaFX WebView zu diesem [link] (http://stackoverflow.com/a/34444807/1334241) –

Antwort

16

Ich war in der Lage, das Problem zu beheben. Es sieht so aus, als ob die aktuelle stabile Version von FirebugLite für traditionelle Browser gut funktioniert, aber etwas ist anders, was dazu führt, dass es für eine Anwendung fehlschlägt, die von JAVAFX WebView angezeigt wird.

konnte ich Firebug meiner Anwendung hinzufügen, indem Sie eine unkomprimierte Version von FirebugLite

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

Die Lösung kam mit aus: Testing IE6 with Firebug Lite

+1

1.2 ist die neueste Version von Firebug Lite, die für mich mit bootstrap.css funktioniert, auch auf normalen Browsern – ZiglioUK

+0

Gleiches mit pure.css; 1.2 Werke, 1.3 und 1.4 nicht. – Norswap

+0

Wonderful ....... – repzero

2

ich mit dem JavaFX Webview festgestellt, dass der beste Weg, schnell Debuggen Javascript war folgendes zu tun:

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

dass Rohre durch alle alert("whatever"); Teile des Codes, so dass Sie kann sehen, was vor sich geht.

14

Der Befehl, den Sie in Ihrer Frage angegeben haben, funktioniert für mich (naja, meistens).

Vielleicht warten Sie nicht, bis das WebView ein Dokument geladen hat, bevor Sie versuchen, Firebug auszulösen.

Zum Beispiel startet der folgende Code Firebug Lite für mich (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 selbst nicht besonders groß scheint Webseiten zu debuggen (zumindest unter WebView für mich). Die Konsole, HTML, CSS und DOM-Panels schien gut zu sein, ebenso wie die Inspektionsoption. Also einige nützliche Informationen dort. Der Skript-Teil zeigte die Skripte, aber ich sah sowieso nicht, dass in den Skripten Haltepunkte, Uhren usw. gesetzt wurden.

+0

Endlich funktioniert das dank Ihrem Tipp über das Hinzufügen des ChangeListener! So viele andere Beispiele da draußen lassen diesen Teil aus. Es ist überraschend, dass diese Antwort nicht viel Unterstützung bietet. – Splaktar

+4

Probierte die oben genannte Lösung mit JavaFX - arbeitete mit extern geladenen URLs, aber keine URLs von lokalen Dateien geladen. Für diese Dateien musste ich das zur lokalen HTML-Datei hinzufügen: ' ' –

+0

@DavemM vielen Dank für Ihren hilfreichen Kommentar. Löste mein Problem! – schlimpf

Verwandte Themen