2017-10-26 12 views
1

내 응용 프로그램에서 javafx를 사용하고 웹 사이트의 뉴스를 보여주는 WebView가 있습니다. 이 WebView 내부에서 링크를 클릭하면 WebView가 아닌 ​​브라우저에서 열어야합니다. 나는 자바에서 작동합니다 코드 발견 :nashorn에서 Java 클래스를 캐스팅하는 방법은 무엇입니까?

NodeList nodeList = document.getElementsByTagName("a"); 
     for (int i = 0; i < nodeList.getLength(); i++) 
     { 
      Node node= nodeList.item(i); 
      EventTarget eventTarget = (EventTarget) node; 
      eventTarget.addEventListener("click", new EventListener() 
      { 
       @Override 
       public void handleEvent(Event evt) 
       { 
        EventTarget target = evt.getCurrentTarget(); 
        HTMLAnchorElement anchorElement = (HTMLAnchorElement) target; 
        String href = anchorElement.getHref(); 
        //handle opening URL outside JavaFX WebView 
        System.out.println(href); 
        evt.preventDefault(); 
       } 
      }, false); 
     } 

을하지만 트릭 내가 (엔진을 nashron 사용) JS로 번역 할 필요가있다. 나는 순간이 여기에서 무엇 :

pane.lookup("#newsPane").getEngine().getLoadWorker().stateProperty()["addListener(javafx.beans.value.ChangeListener)"](
    function(o, ov, nv){ 
     if (nv == javafx.concurrent.Worker.State.SUCCEEDED) { 
      // Here the things get started 
      var nodes = pane.lookup("#newsPane").getEngine().getDocument().getElementsByTagName("a"); 
      for(var i=0;i<nodes.getLength();i++){ 
       var node = nodes.item(i); 
       // I got node, but now i need to cast it to EventTarget, but i didn't find anywhere how to do that 
       LogHelper.info(node); 
       // instead of *node* there should be *eventTarget*, also i'm not sure the code above will work even with EventTarget 
       node['addEventListener("click", javafx.event.EventListener)'](
        function(evt){ 
         var target = evt.getCurrentTarget(); 
         var href = target.getHref(); 
         LogHelper.info(href); 
         evt.preventDefault(); 
        } 
       ) 
      } 
     } 
    }); 

가 좀 Java.to()Java.type()을 발견,하지만 확실하지 (을 사용하여 주조하는 방법을 찾을 수 없습니다 그것은 가능하다). 아무에게도 조언 해 줄 수 있겠 니?

+0

Java.type() 구문을 사용하여 JavaScript 내에서 Java 클래스를 인스턴스화 할 수 있습니다. 그게 캐스팅의 의미인가요? . 귀하의 질문을 실제로 얻지는 않습니다. – NishM

답변

0

JavaScript를 사용할 때 개체를 전송할 필요가 없습니다. 따라서 객체에 함수를 호출하면됩니다.