如何在 nashorn 中投射 java 类?
How to cast java classes in nashorn?
在我的应用程序中,我使用 javafx 并且我有一个显示网站新闻的 WebView。当在此 WebView 中单击任何 link - 它应该在浏览器中打开它,而不是在 WebView 中。我找到了应该在 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(),但我没找到了解如何使用它们进行投射(完全不确定是否可能)。请问谁能给我一些建议吗?
当您使用 JavaScript 时,您不需要投射您的对象。所以只需调用对象上的函数即可。
在我的应用程序中,我使用 javafx 并且我有一个显示网站新闻的 WebView。当在此 WebView 中单击任何 link - 它应该在浏览器中打开它,而不是在 WebView 中。我找到了应该在 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(),但我没找到了解如何使用它们进行投射(完全不确定是否可能)。请问谁能给我一些建议吗?
当您使用 JavaScript 时,您不需要投射您的对象。所以只需调用对象上的函数即可。