目前,我通过向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()
}}})
这恰好工作但感觉就像是黑客。 webview是否有合法的方式可以请求应用程序根据单击的元素刷新其内容?
答案 0 :(得分:1)
由于我不了解Scala,我只能为您提供Java方法,但您可能会弄清楚如何将其转换为Scala。 在Java(或您的Scala)代码和JavaScript之间注册一个桥梁。 Oracle的this article描述了基础知识。页面中的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函数将更新页面,或者您可以加载完全不同的内容。