In the past I used JEditorPane and now I'm trying my best with JavaFX WebEngine. How can I register listeners for events containing hyperlinks on displayed page (like link selection or click on a link)?
In JEditorPane there was addHyperlinkListener method...
EDIT:
I followed the advice in the first answer. This is my code:
webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>() {
public void changed(ObservableValue ov, State oldState, State newState) {
if (newState == Worker.State.SUCCEEDED) {
// note next classes are from org.w3c.dom domain
EventListener listener = new EventListener() {
public void handleEvent(Event ev) {
System.out.println("KLIKNIETO!!!");
}
};
Document doc = webEngine.getDocument();
Element el = doc.getElementById("a");
NodeList lista = doc.getElementsByTagName("a");
System.out.println("Liczba elementow: "+ lista.getLength());
for (int i=0; i<lista.getLength(); i++)
((EventTarget)lista.item(i)).addEventListener("click", listener, false);
}
}
});
I now receive events after clicking on the links. However I need to get reference to the clicked link (to get it's content). How can I achieve that?
The easier way would be using the LibFX libaries WebViewHyperlinkListener : https://github.com/CodeFX-org/LibFX/blob/master/src/main/java/org/codefx/libfx/control/webview/WebViewHyperlinkListener.java
Where you have
replace with
to get the URL of the link clicked on.
This page gives a good example of what you are trying to do:
http://blogs.kiyut.com/tonny/2013/07/30/javafx-webview-addhyperlinklistener
You can catch the link click event by adding a click event handler in Java using the w3c dom classes once the relevant document has loaded.
See Sergey's example in Detecting HTML textarea onkeyup event in JavaFX WebView.
You can also catch the events using JavaScript (for example using jQuery), which might be a little easier to work with than the w3c dom api.
If you are using JavaScript to catch events and you want to feedback notification of the events or subsequent processing from JavaScript to Java, you can use the JavaScript <=> Java bridge api.
I've logged a request to get a sample of this functionality added to the official WebView tutorial.