2013-07-09 9 views
5

W przeszłości korzystałem z JEditorPane, a teraz staram się jak najlepiej z JavaFX WebEngine. Jak mogę zarejestrować detektory zdarzeń zawierających hiperłącza na wyświetlanej stronie (np. Wybór linku lub kliknięcie linku)?HyperlinkListener w JavaFX WebEngine

W JEditorPane była metoda addHyperlinkListener ...

EDIT:

I po porady w pierwszej odpowiedzi. To jest mój kod:

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

Teraz otrzymuję powiadomienia po kliknięciu linków. Muszę jednak uzyskać odnośnik do klikniętego linku (aby uzyskać jego zawartość). Jak mogę to osiągnąć?

+0

Jakie treści trzeba? Dom węzłów, treść tekstowa, href, treść pobrana z połączonej lokalizacji href? – jewelsea

+0

Potrzebuję połączonych treści href (np. some link) – Marco

Odpowiedz

2

Możesz przechwycić zdarzenie kliknięcia linku, dodając obsługę zdarzeń kliknięcia w Javie, używając klas DOM w3c po załadowaniu odpowiedniego dokumentu.

Zobacz przykład Siergieja w Detecting HTML textarea onkeyup event in JavaFX WebView.

Możesz również przechwytywać zdarzenia przy użyciu JavaScript (na przykład używając jQuery), co może być nieco łatwiejsze w obsłudze niż w3c dom api.

Jeśli używasz JavaScript do przechwytywania zdarzeń i chcesz powiadomić o zdarzeniach lub następnym przetwarzaniu z JavaScript do Java, możesz użyć JavaScript <=> Java bridge api.

Zalogowałem żądanie, aby uzyskać próbkę tej funkcjonalności dodaną do oficjalnego samouczka WebView.

+0

Wszystkie moje linki nie wskazują na inne witryny (protokół http), ale na zapisy w bazie danych: some_link. Chcę utworzyć procedurę obsługi zdarzeń, która będzie parsować dane z takich łączy i wyświetlać je. – Marco

+0

Jak moja odpowiedź nie pomoże ci to zrobić? Jakie podejście próbowałeś i gdzie utknąłeś? Możesz edytować swoje pytanie, aby podać te nowe informacje. – jewelsea

+0

po zaktualizowaniu. Zastanawiam się, jak mogę uzyskać odwołanie do klikniętego linku – Marco