目前,我通过在HTML内容中添加Javascript事件处理程序来实现这一点,该处理程序根据单击的项目设置全局变量:
<script>
var clicked="";
</script>
<span onmousedown="clicked='me';">me</span>
然后从主应用程序中,我在webview的鼠标点击处理程序中查询这个变量的内容:
webview.setOnMouseClicked(new EventHandler[MouseEvent]{
def handle(mouseEvent:MouseEvent){
if(mouseEvent.getEventType().toString()=="MOUSE_CLICKED"){
val clicked=webview.executeScript("clicked").toString()
}}})
这恰好奏效,但感觉像是黑客。是否有一种合法的方式可以让web视图请求应用程序根据单击的元素刷新其内容?
由于我不了解Scala,我只能用Java为您提供一种方法,但您可能会发现如何将其转换为Scala。注册Java(或者在您的例子中是Scala)代码和JavaScript之间的桥梁。Oracle在本文中介绍了这些基础知识。页面中的JavaScript可以调用应用程序,通知它单击了某个按钮:
public class MyBridge {
public void callbackFromJavaScript(String what) {
...
}
}
JSObject jsobj = (JSObject) webEngine.executeScript("window");
jsobj.setMember("java", new MyBridge());
然后,您可以在单击某个元素并执行callbackFromJavaScript
时进行调用:
<span onmousedown="java.callbackFromJavaScript('me');">me</span>
然后,从callbackFromJavaScript
,您可以轻松地调用JavaScript函数并传递对象(例如JSON),JS函数将更新页面,或者您可以加载完全不同的内容。