WebView:jsBridge 和 MouseEvent handler 的执行顺序

问题描述 投票:0回答:1

我正在使用 JavaFX

WebView
,需要用它做两件事:

i) 通过鼠标点击从 JS 代码调用 Java 方法。为此我愿意

Java: 
engine.getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> {
    if (newState == javafx.concurrent.Worker.State.SUCCEEDED) {
        JSObject window = (JSObject) engine.executeScript("window");
        window.setMember("myBridge", myBridge);
    }
});

JS: 
<div onclick="myBridge.foo()">    

因此,在 JS 中,当用户单击

div
时,会调用
myBridge.foo()

ii) 为 webView 调用 MouseEvent.MOUSE_CLICKED 上的处理程序。

webView.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> {
    //my handler code
});

我的问题 - 首先调用什么 - 桥的 java 方法或

MOUSE_CLICKED
事件处理程序。

测试表明桥的方法首先被调用,然后是事件处理程序。但我需要确切地知道,因为我不知道 JS 代码在

WebView
中是如何处理的以及使用什么线程。

java javafx
1个回答
0
投票

事件可能遵循“事件交付流程”

所以:

  1. 在捕获阶段,WebView 上的 Java 事件过滤器 将捕获事件。
  2. 然后它将被路由到 Web 视图,其中 JavaScript 事件过滤器或事件处理程序可以处理该事件
  3. 最后在冒泡阶段(如果事件尚未被消耗),事件将被路由到 WebView 上的 Java 事件处理程序

我只说可能是因为我没有测试它,并且混合 JavaFX 和 WebEngine 技术会让事情变得复杂,所以可能会发生意想不到的事情。

© www.soinside.com 2019 - 2024. All rights reserved.