在 Web 视图完全加载后执行任务
是否可以在完成加载后自动运行任务?我知道我可以得到一个从来指示加载进度,但它似乎反复轮询不是一个优雅的解决方案(即锁定程序直到页面加载)。我知道我可以用 a 来做到这一点,所以我可以以某种方式获取 for,并添加一个执行 on complete 命令吗?WebEngine
Worker
WebEngine
Worker
Task
Task
WebEngine
是否可以在完成加载后自动运行任务?我知道我可以得到一个从来指示加载进度,但它似乎反复轮询不是一个优雅的解决方案(即锁定程序直到页面加载)。我知道我可以用 a 来做到这一点,所以我可以以某种方式获取 for,并添加一个执行 on complete 命令吗?WebEngine
Worker
WebEngine
Worker
Task
Task
WebEngine
基于 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
}
} );
作为 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
} );
如果您只想侦听下一页加载,而不是每个后续页面加载,则在页面加载后停止侦听。
为此,您可以在侦听器开始执行后将其删除(在侦听器代码中):
webview.getEngine().getLoadWorker().stateProperty().addListener(
new ChangeListener<Worker.State>() {
@Override
public void changed(
ObservableValue<? extends Worker.State> observable,
Worker.State oldValue, Worker.State newValue) {
switch (newValue) {
case SUCCEEDED:
case FAILED:
case CANCELLED:
webview
.getEngine()
.getLoadWorker()
.stateProperty()
.removeListener(this);
}
if (newValue != Worker.State.SUCCEEDED) {
return;
}
// Your logic here
System.out.println("page loaded");
}
} );