如何从主应用程序检测JavaFXWebView上的点击



目前,我通过在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函数将更新页面,或者您可以加载完全不同的内容。

相关内容

  • 没有找到相关文章

最新更新