JavaFX WebEngine中的HyperlinkListener

时间:2013-07-09 18:50:34

标签: java javafx-2 javafx

过去我使用过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);
        }
    }
});

我现在在点击链接后收到活动。但是我需要引用点击的链接(以获取它的内容)。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:5)

你在哪里

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

替换为

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

获取点击链接的网址。

此页面提供了您尝试执行的操作的一个很好的示例:

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

答案 1 :(得分:2)

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

Detecting HTML textarea onkeyup event in JavaFX WebView中查看谢尔盖的例子。

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

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

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

答案 2 :(得分:0)