8

以前は JEditorPane を使用していましたが、現在は JavaFX WebEngine で最善を尽くしています。表示されたページにハイパーリンクを含むイベント (リンクの選択やリンクのクリックなど) のリスナーを登録するにはどうすればよいですか?

JEdi​​torPane には addHyperlinkListener メソッドがありました...

編集:

最初の回答のアドバイスに従いました。これは私のコードです:

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);
        }
    }
});

リンクをクリックした後、イベントを受け取るようになりました。ただし、クリックしたリンクへの参照を取得する必要があります(コンテンツを取得するため)。どうすればそれを達成できますか?

4

3 に答える 3

6

あなたが持っている場所

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

と置換する

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

クリックされたリンクの URL を取得します。

このページは、あなたがやろうとしていることの良い例を示しています:

http://blogs.kiyut.com/tonny/2013/07/30/javafx-webview-addhyperlinklistener

于 2013-10-28T16:44:32.400 に答える
3

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.

于 2013-07-09T19:07:20.797 に答える