我猜这不可能,但是。 。 。有人知道是否有办法将javafx.scene.Node添加到javafx.scene.web.WebView?
我主要担心的是Node在DOM中是可见的。理想情况下,它会在dom中被视为div,但这不是我主要关注的问题。
答案 0 :(得分:1)
当你谈论dom和div时,这些是html组件和标签。 Node是Java。它不能直接在html中以“原样”显示或处理。但是你可以桥接它:
@Override
public void start(Stage primaryStage) {
WebView webView = new WebView();
final WebEngine webEngine = webView.getEngine();
webEngine.load(getClass().getResource("demo.html").toExternalForm());
webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
@Override
public void changed(ObservableValue<? extends Worker.State> ov, Worker.State oldState, Worker.State newState) {
if (newState == Worker.State.SUCCEEDED) {
JSObject window = (JSObject) webEngine.executeScript("window");
window.setMember("myJavaFXButton", new Button("My JavaFX Button"));
}
}
});
StackPane root = new StackPane();
root.getChildren().addAll(webView);
Scene scene = new Scene(root, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
demo.html是,
<div id="content">content</div>
<button onclick="document.getElementById('content').innerHTML = myJavaFXButton.getText();">
Get my lovely JavaFX button's text
</button>