JAVAFX/WebView/WebEngine FireBugLite还是其他一些调试器?

roo*_*elt 7 java javafx webview firebug-lite

我正在开发一个应用程序,需要在应用程序的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');}"); 
Run Code Online (Sandbox Code Playgroud)

roo*_*elt 17

我能够解决问题.看起来FirebugLite的当前稳定版本适用于传统浏览器,但有些不同使得它对于JAVAFX WebView查看的应用程序而言失败.

我可以使用未压缩版本的FirebugLite将Firebug添加到我的应用程序中

<script type='text/javascript' src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
Run Code Online (Sandbox Code Playgroud)

解决方案来自:使用Firebug Lite测试IE6


jew*_*sea 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');}"); 
  }
}
Run Code Online (Sandbox Code Playgroud)

调试

Firebug Lite本身在调试网页方面似乎并不是特别出色(至少在WebView下).控制台,html,css和dom面板似乎都很好,以及检查选项.那里有一些有用的信息.脚本部分显示了脚本,但我没有看到在脚本中设置断点,监视等.

  • 用JavaFX尝试了上述解决方案 - 使用外部加载的URL,但不是从本地文件加载的URL.对于那些文件,我不得不将其添加到本地html文件中:`<script type ='text/javascript'src ='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js' > </ SCRIPT>` (5认同)