HyperlinkListener in JavaFX WebEngine


Question

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?

1
7
7/10/2013 6:04:49 PM

Accepted Answer

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.

2
5/23/2017 11:53:55 AM

Where you have

System.out.println("KLIKNIETO!!!");

replace with

String href = ((Element)ev.getTarget()).getAttribute("href");

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


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon