在我的 JavaFX 项目中,我在等待网站完全呈现的 WebView 的 WebEngine 上有一个侦听器。然后我需要访问生成的 DOM 文档。如果我不知道侦听器属于哪个 WebEngine,这将不起作用!
创建变量或简单地使用webView存在的变量不是一种选择!这是因为我正在使用 ChangeListeners 创建几个 webViews。我现在如何将它们分配给彼此?
webView.getEngine().getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) {
if (newState == Worker.State.SUCCEEDED) {
// Here I do my stuff
// I need to access webView.getEngine().getDocument()
}
}
});
更新
这是我面临的问题的最小工作示例:https : //github.com/mg98/StackOverflow-Demonstration
它基本上是关于: Main.java
package sample;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import org.w3c.dom.Document;
public class Main extends Application {
private static Controller ctrl;
private final static String[] urls = new String[] {
"https://google.com",
"https://youtube.com",
"https://facebook.com",
"https://twitter.com",
"https://stackoverflow.com"
};
@Override
public void start(Stage primaryStage) throws Exception{
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("sample.fxml"));
Parent root = fxmlLoader.load();
ctrl = fxmlLoader.getController();
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
findSomething();
}
public static void main(String[] args) {
launch(args);
}
相关分类