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()을 발견,하지만 확실하지 (을 사용하여 주조하는 방법을 찾을 수 없습니다 그것은 가능하다). 아무에게도 조언 해 줄 수 있겠 니?
Java.type() 구문을 사용하여 JavaScript 내에서 Java 클래스를 인스턴스화 할 수 있습니다. 그게 캐스팅의 의미인가요? . 귀하의 질문을 실제로 얻지는 않습니다. – NishM