有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JAVAFX/WebView/WebEngine FireBugLite或其他调试器?

我正在开发一个应用程序,需要在应用程序的WebView/WebEngine部分运行调试器,以便更好地调试我的应用程序。但我在互联网上找到的注入Firebug Lite的代码由于某种原因无法工作

如果我在Firefox控制台上运行Javascript代码,它本身就可以正常工作,但如果通过JavaFX webview/webengine执行相同的代码,它就不能正常工作。netbeans控制台不会向其他人抛出任何错误。。。所以我不确定为什么FirebugLite UI没有呈现/加载

是什么原因造成的,还有其他的选择吗

我正在使用JavaFX2.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');}"); 

共 (3) 个答案

  1. # 1 楼答案

    我能解决这个问题。看起来FirebugLite的当前稳定版本在传统浏览器中运行良好,但在JAVAFX WebView中查看的应用程序中,有些不同之处使其失败

    我能够通过使用FirebugLite的未压缩版本将Firebug添加到我的应用程序中

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

    解决方案来自:Testing IE6 with Firebug Lite

  2. # 2 楼答案

    我发现使用JavaFXWebView快速调试javascript的最佳方法是执行以下操作:

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

    通过管道传输所有的alert("whatever");段代码,这样您就可以看到发生了什么

  3. # 3 楼答案

    你在问题中提供的命令对我有效(大部分情况下)

    也许您没有等到WebView加载了一个文档之后才尝试触发Firebug

    例如,下面的代码将为我启动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');}"); 
      }
    }
    

    debugging

    Firebug Lite本身似乎并不擅长调试网页(至少在WebView下是这样)。控制台、html、css和dom面板以及inspect选项似乎都很好。所以这里有一些有用的信息。脚本部分显示了脚本,但我没有看到在脚本中设置断点、监视等