JavaFX WebView中的Html / Javascript调试
有没有办法调试在Javafx WebView中执行的javascript和html? 类似于Firebug或Chrome的开发者控制台?
我有一个应用程序可以在Firefox和Chrome中呈现,但在WebView中无法正确呈现。 它可能是任何数量的东西,但没有一些调试工具,我不知道如何追查根本原因。
谢谢。
下面是一些Java代码,可以在JavaFX WebView中使用Firebug Lite,而无需修改目标页面的html。
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');}");
您可以使用JavaFX Button或任何其他机制触发代码。
我正在使用chrome DevTools和safari Web Inspector调试JavaFx WebView。
我创建了最小的项目来帮助人们使用DevTools进行调试。 在GitHub上获取它 。 你可以在那里找到:
- runnable javaFXWebKitDebugger.jar
- 创建的javaFXWebKitDebugger.jar的源代码
该示例打开WebView并启用WebSocket Servlet。 当你运行javaFXWebKitDebugger.jar时,打开Chrome浏览器并加载: dev工具url
您可以尝试使用Firebug Lite,它可以合并到任何Web浏览器中。 请参阅http://www.makeuseof.com/tag/install-firebug-for-browsers-other-than-firefox/
回答可能有点晚,但我觉得这种方式很简单。
在java中添加javascript监听器
Java:
webengine.getLoadWorker().stateProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue extends State> observable, State oldValue, State newValue) { JSObject jsobj = (JSObject) webengine.executeScript("window"); jsobj.setMember("java", new JSListener()); } });
然后在java中创建JS侦听器类。
JSListener java:
public class JSListener { public void log(String text){ System.out.println(text); } }
在html文件中添加javascript
使用Javascript:
var javaReady = function(callback){ if(typeof callback =='function'){ if(typeof java !='undefined'){ callback(); } else { var javaTimeout = 0; var readycall = setInterval(function(){ javaTimeout++; if(typeof java !='undefined' || javaTimeout > 1000){ try{ callback(); } catch(s){}; clearInterval(readycall); } },1); } } }; var errorlistener = function(msg, url, line){ javaReady(function(){ java.log(msg +", url: "+url+ ", line:" + line); }); }; //overide onerror var onerror = errorlistener;
如果你想从外面加载html,你不能改变它,你可以使用这样的代码。
var testsss = window.open("http://testError.com"); testsss.onerror = errorlistener;
但首先你需要在java中添加setCreatePopupHandler,你可以在这里看到: webview没有在javafx中打开弹出窗口
- 用红色掩码创建的java缓冲图像
- 如何在Eclipse之外的项目中使用java Eclipse Abstract Syntax Tree? (即不是eclipse插件)
- eclipse:以编程方式启动进程
- java.lang.IllegalArgumentException:string curve25519 not a OID bouncycastle 1.52
- 使用JSF,MyFaces和Facelets迭代HashMap的麻烦
- 等效于Java ThreadLocal变量的Objective C / Swift
- Java – 递归程序 – 将基数为10的数字转换为任何基数
- multithreading访问文件
- 我可以在Eclipse的类型层次结构视图中看到接口吗?