8

アプリを開発しており、アプリケーションの WebView/WebEngine 部分でデバッガーを実行して、アプリケーションをより適切にデバッグできるようにする必要があります。しかし、Firebug Lite を挿入するためにインターネットで見つけたコードは、何らかの理由で機能しません。

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

これを引き起こしている可能性がありますか、他の代替手段はありますか?

私はJavaFX 2.2を使用しています

// 動作しません....

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

3 に答える 3

17

問題を解決できました。FirebugLite の現在の安定版は従来のブラウザでは問題なく動作するように見えますが、JAVAFX WebView で表示されるアプリケーションでは失敗する原因となる何かが異なります。

非圧縮バージョンの FirebugLite を使用して、アプリケーションに Firebug を追加することができました

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

解決策は次のとおりです: Firebug Lite で IE6 をテストする

于 2013-06-30T16:34:09.657 に答える
15

質問で提供したコマンドは、私にとってはうまくいきます(ほとんどの場合)。

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

たとえば、次のコードは Firebug Lite を起動します (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');}"); 
  }
}

デバッグ

Firebug Lite 自体は、Web ページのデバッグに特に優れているようには見えません (少なくとも WebView では)。コンソール、html、css、および dom パネルは、検査オプションと同様に問題ないように見えました。そこで、役立つ情報をいくつか。スクリプト部分にはスクリプトが表示されていましたが、スクリプトにブレークポイントやウォッチなどを設定する方法は見当たりませんでした。

于 2013-08-23T07:07:30.230 に答える
3

JavaFX Webview を使用して、javascript をすばやくデバッグする最善の方法は次のようにすることであることがわかりました。

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

これにより、コードのすべての部分がパイプ処理されるalert("whatever");ため、何が起こっているかを確認できます。

于 2013-08-22T19:55:25.317 に答える