JavaFX WebEngine中的HyperlinkListener

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

在JEditorPane中有addHyperlinkListener方法……

编辑:

我在第一个答案中遵循了建议。 这是我的代码:

webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener() { 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); } } }); 

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

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

请参阅在JavaFX WebView中检测HTML textarea onkeyup事件中的 Sergey的示例。

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

如果您使用JavaScript来捕获事件,并且想要反馈事件的通知或从JavaScript到Java的后续处理,则可以使用JavaScript <=> Java桥API 。

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

你在哪里

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

用。。。来代替

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

获取点击链接的URL。

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

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

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