在WebView完全加载后执行任务

时间:2021-01-22 17:00:25

Is it possible to have a task automatically run after the WebEngine finishes loading? I know I can get a Worker from WebEngine to indicate loading progress, but it seems like repeatedly polling the Worker not an elegant solution (i.e. locking up program until page loads). I know I can do this with a Task, so can I get the Task for WebEngine somehow, and add an execute on complete command?

有可能在WebEngine完成加载后自动运行任务吗?我知道我可以从WebEngine获得一个Worker来指示加载进度,但它似乎重复地轮询Worker,而不是一个优雅的解决方案(例如,在页面加载之前锁定程序)。我知道我可以用一个任务来完成这个任务,所以我可以以某种方式获得WebEngine的任务,并添加一个执行完成的命令吗?

1 个解决方案

#1


16  

Sample based on the WebView documentation:

基于WebView文档的示例:

webView.getEngine().getLoadWorker().stateProperty().addListener(
  new ChangeListener<Worker.State>() {
  @Override
  public void changed(
    ObservableValue<? extends Worker.State> observable,
    Worker.State oldValue, Worker.State newValue ) {

    if( newValue != Worker.State.SUCCEEDED ) {
      return;
    }

    // Your logic here
  }
} );

As a lambda expression:

作为一个lambda表达式:

webView.getEngine().getLoadWorker().stateProperty().addListener(
  (ObservableValue<? extends Worker.State> observable,
    Worker.State oldValue,
    Worker.State newValue) -> {
    if( newValue != Worker.State.SUCCEEDED ) {
      return;
    }

    // Your logic here
  } );

#1


16  

Sample based on the WebView documentation:

基于WebView文档的示例:

webView.getEngine().getLoadWorker().stateProperty().addListener(
  new ChangeListener<Worker.State>() {
  @Override
  public void changed(
    ObservableValue<? extends Worker.State> observable,
    Worker.State oldValue, Worker.State newValue ) {

    if( newValue != Worker.State.SUCCEEDED ) {
      return;
    }

    // Your logic here
  }
} );

As a lambda expression:

作为一个lambda表达式:

webView.getEngine().getLoadWorker().stateProperty().addListener(
  (ObservableValue<? extends Worker.State> observable,
    Worker.State oldValue,
    Worker.State newValue) -> {
    if( newValue != Worker.State.SUCCEEDED ) {
      return;
    }

    // Your logic here
  } );