Sal*_*lim 7 javafx webview javafx-webengine
我不太确定怎么说这个问题,但我会试试.我的应用程序通过单击按钮对网站运行命令.问题是在每个循环期间getLoadWorker增加1.在加载工作器中我设置了监听器.下面是它的工作原理.
MenuItem executeToHere = new MenuItem("Execute to here");
executeToHere.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
listViewStepItem item = stepListView.getSelectionModel().getSelectedItem();
int selectedIndex = stepList.getSelectionModel().getSelectedIndex();
WebBrowser browser = new WebBrowser(item.getWebView(), item.getListView());
for(int i=0; i < selectedIndex; i++){
listViewStepItem item2 = stepList.getItems().get(i);
if(item2.comboBoxSelected.contains("http://")){
browser.loadURL();
} else if(item2.comboBoxSelected.contains("enter")){
browser.enterText();
} else if(item2.comboBoxSelected.contains("click")){
browser.click();
}
}
browser.setWorker();
}
});
public class WebBrowser{
public WebBrowser(WebView fxmlWebView, WebEngine webEngine){
this.view = fxmlWebView;
this.engine = webEngine;
}
public void loadUrl(String url){
webEngine.load(url);
}
public void enterText(){
System.out.println("ENTER TEXT");
}
public void click(){
System.out.println("click");
}
public void setWorker(){
webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>(){
public void changed(ObservableValue ov, State oldState, State newState){
if(newState == javafx.concurrent.Worker.State.SUCCEEDED){
listener = new EventListener(){
public void handleEvent(org.w3c.dom.events.Event evt) {
eventListeners(evt);
}
};
setListenerByTagNames(listener, "a");
}
}
});
}
private void setListenerByTagNames(EventListener listener, String tagName){
Document doc = webEngine.getDocument();
NodeList elements = doc.getElementsByTagName(tagName);
for(int i=0; i < elements.getLength();i++){
((EventTarget) elements.item(i)).addEventListener("click", listener, false);
}
System.out.println("Listening on :"+tagName);
}
}
Run Code Online (Sandbox Code Playgroud)
我第一次运行它时输出看起来像这样
ENTER TEXT
click
Listening on : a
Run Code Online (Sandbox Code Playgroud)
第二次
ENTER TEXT
click
Listening on : a
Listening on : a
Run Code Online (Sandbox Code Playgroud)
第三次
ENTER TEXT
click
Listening on : a
Listening on : a
Listening on : a
Run Code Online (Sandbox Code Playgroud)
我没有看到工作者如何增加,但它导致页面以某种方式重新加载/刷新,因此重置了对页面DOM的所有更改.
| 归档时间: |
|
| 查看次数: |
451 次 |
| 最近记录: |