8

过去我使用 JEditorPane,现在我正在尽力使用 JavaFX WebEngine。如何为显示页面上包含超链接的事件注册侦听器(例如链接选择或单击链接)?

在 JEditorPane 中有 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

加载相关文档后,您可以通过使用 w3c dom 类在 Java 中添加单击事件处理程序来捕获链接单击事件。

请参阅Detecting HTML textarea onkeyup event in JavaFX WebView中 Sergey 的示例。

您还可以使用 JavaScript(例如使用jQuery)捕获事件,这可能比 w3c dom api 更容易使用。

如果您正在使用 JavaScript 捕获事件,并且希望将事件通知或后续处理从 JavaScript 反馈到 Java,则可以使用JavaScript <=> Java bridge api

我已经记录了一个请求,以获取添加到官方 WebView 教程中的此功能示例。

于 2013-07-09T19:07:20.797 回答
0

更简单的方法是使用 LibFX 库 WebViewHyperlinkListener :https://github.com/CodeFX-org/LibFX/blob/master/src/main/java/org/codefx/libfx/control/webview/WebViewHyperlinkListener.java

于 2016-06-13T07:56:53.083 回答