JAVAFX/WebView/WebEngine FireBugLite或其他调试器?
我正在开发一个应用程序,需要在应用程序的WebView/WebEngine部分运行调试器,以便更好地调试我的应用程序。但我在互联网上找到的注入Firebug Lite的代码由于某种原因无法工作 如果我在Firefox控制台上运行Javascript代码,它本身就可以正常工作,但如果通过JavaFX webview/webengine执行相同的代码,它就不能正常工作。netbeans控制台不会向其他人抛出任何错误。。。所以我不确定为什么FirebugLite UI没有呈现/加载 是什么原因造成的,还有其他的选择吗 我正在使用JavaFX2.2 //不起作用JAVAFX/WebView/WebEngine FireBugLite或其他调试器?,java,webview,javafx,firebug-lite,Java,Webview,Javafx,Firebug Lite,我正在开发一个应用程序,需要在应用程序的WebView/WebEngine部分运行调试器,以便更好地调试我的应用程序。但我在互联网上找到的注入Firebug Lite的代码由于某种原因无法工作 如果我在Firefox控制台上运行Javascript代码,它本身就可以正常工作,但如果通过JavaFX webview/webengine执行相同的代码,它就不能正常工作。netbeans控制台不会向其他人抛出任何错误。。。所以我不确定为什么FirebugLite UI没有呈现/加载 是什么原因造成的,
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');}");
我能解决这个问题。看起来FirebugLite的当前稳定版本在传统浏览器中运行良好,但在JAVAFX WebView中查看的应用程序中,有些不同之处使其失败 我能够通过使用FirebugLite的未压缩版本将Firebug添加到我的应用程序中
<script type='text/javascript' src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
解决方案来自:我发现使用JavaFX Webview快速调试javascript的最佳方法是执行以下操作:
webView.getEngine().setOnAlert(new EventHandler<WebEvent<String>>() {
@Override
public void handle(WebEvent<String> event) {
System.out.println(event.getData());
}
});
webView.getEngine().setOnAlert(新的EventHandler()){
@凌驾
公共无效句柄(WebEvent事件){
System.out.println(event.getData());
}
});
通过管道传输所有的
警报(“无论什么”)代码>代码片段,以便查看发生了什么 您在问题中提供的命令对我很有效(大部分情况下)
也许您没有等到WebView加载了一个文档之后才尝试触发Firebug
例如,下面的代码将为我启动Firebug Lite(JavaFX 8b103,OS X 10.8)
导入javafx.application.application;
导入javafx.beans.value.ChangeListener;
导入javafx.beans.value.observeValue;
导入javafx.scene.scene;
导入javafx.scene.web.WebEngine;
导入javafx.scene.web.WebView;
导入javafx.stage.stage;
导入org.w3c.dom.Document;
公共类WebViewWithDebugger扩展了应用程序{
公共静态void main(字符串[]args){launch(args);}
@覆盖公共无效开始(阶段primaryStage){
最终WebView WebView=新WebView();
final WebEngine=webView.getEngine();
发动机负荷(“http://docs.oracle.com/javafx/2/get_started/animation.htm");
engine.documentProperty().addListener(新的ChangeListener()){
@覆盖公共无效已更改(Observalevalue最终能够实现这一点,这要感谢您关于添加ChangeListener的提示!太多其他示例遗漏了这一部分。令人惊讶的是,这个答案没有太多支持。使用JavaFX尝试了上述解决方案-使用外部加载的URL,但不使用从本地文件加载的URL。对于这些文件,我必须添加这是本地html文件:
@DavemM谢谢你的有用评论。解决了我的问题!1.2是Firebug lite的最新版本,适用于bootstrap.css,也适用于普通浏览器。我回答了如何在JavaFX WebView上使用DevTools
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');}");
}
}