过去我使用过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);
}
}
});
我现在在点击链接后收到活动。但是我需要引用点击的链接(以获取它的内容)。我怎样才能做到这一点?
答案 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)
更简单的方法是使用LibFX库WebViewHyperlinkListener:https://github.com/CodeFX-org/LibFX/blob/master/src/main/java/org/codefx/libfx/control/webview/WebViewHyperlinkListener.java