2017-10-26 14 views
1

私のアプリケーションではjavafxを使用しており、ウェブサイトからのニュースを表示するWebViewを持っています。このWebViewの内部でリンクがクリックされると、WebViewではなくブラウザで開きます。私はJavaで動作するはずのコードが見つかりました: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); 
     } 

をしかし、トリックは、私はJS(nashronエンジンを使用して)にそれを翻訳する必要があること、です。ここで私は一瞬のために持っている:

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

JavaScript内でJavaクラスをインスタンス化するには、Java.type()構文を使用します。それは鋳造の意味ですか? 。本当にあなたの質問を得ることはありません。 – NishM

答えて

0

JavaScriptを使用している場合、オブジェクトをキャストする必要はありません。オブジェクト上で関数を呼び出すだけです。