Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HyperlinkListener in JavaFX WebEngine

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?

like image 289
Marco Avatar asked Jul 09 '13 18:07

Marco


1 Answers

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

like image 170
IanB Avatar answered Sep 17 '22 08:09

IanB