Firebug lite を使用して JavaFX webview の HTML 要素をデバッグしています。以下のコードを使用しています。
engine.documentProperty().addListener(new ChangeListener<Document>() {
@Override public void changed(ObservableValue<? extends Document> prop, Document oldDoc, Document newDoc) {
enableFirebug(engine);
}
});
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');}");
}
さまざまな HTML 要素をクリックするたびに、要素の ID と名前を Firebug コンソールに出力する JavaScript があります。このコンソール出力を JavaFX アプリケーションに取得する必要があります。助けてください。
engine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>() {
@Override
public void changed(ObservableValue<? extends State> observable,
State oldValue, State newValue) {
JSListener listener = new JSListener();
JSObject jsobj = (JSObject) engine.executeScript("console.log = function(){"
+ "var lastElement = null; "
+ "document.addEventListener('click', function(e) {"
+ "if (e.target != lastElement) {"
+ "lastElement = e.target;"
+ "java.log(lastElement.name);"
+ "}}"
+ ");"
+"}");
jsobj.setMember("java", listener);
}
});
Java コード :
public class JSListener {
public void log(String text) {
System.out.println(text);
}
}
以下のコードを使用して要素 ID を取得しています。どこが間違っているのか教えてください!