我正在使用 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
中是如何处理的以及使用什么线程。
事件可能遵循“事件交付流程”。
所以:
我只说可能是因为我没有测试它,并且混合 JavaFX 和 WebEngine 技术会让事情变得复杂,所以可能会发生意想不到的事情。