我正在使用JavaFX webview,我想自动点击一个元素[a]来做某事,但我失败了。这是我的代码。
JAVA
package webviewbrowser;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class WebViewTest1 extends Application {
@Override
public void start(Stage stage) throws Exception {
StackPane root = new StackPane();
WebView view = new WebView();
final WebEngine eng = view.getEngine();
eng.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) {
eng.executeScript("document.getElementById('abc').click();");
}
}
});
eng.load("file:///E:\\index.html");
root.getChildren().add(view);
Scene scene = new Scene(root, 800, 600);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
HTML
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>index</title>
<script type="text/javascript">
function abc() {
alert(123);
}
</script>
<style>
</style>
</head>
<body>
<a href="javaScript:void(0)" onclick="abc()" id="abc">ttt</a>
</body>
</html>
只有一个异常&#34; netscape.javascript.JSException:TypeError:&#39; undefined&#39;不是一个功能&#34;。
netscape.javascript.JSException: TypeError: 'undefined' is not a function
at com.sun.webpane.platform.WebPage.twkExecuteScript(Native Method)
at com.sun.webpane.platform.WebPage.executeScript(WebPage.java:1438)
at javafx.scene.web.WebEngine.executeScript(WebEngine.java:811)
at webviewbrowser.WebViewTest1$1.changed(WebViewTest1.java:24)
at webviewbrowser.WebViewTest1$1.changed(WebViewTest1.java:20)
at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:196)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:100)
at javafx.beans.property.ReadOnlyObjectWrapper$ReadOnlyPropertyImpl.fireValueChangedEvent(ReadOnlyObjectWrapper.java:195)
at javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:161)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:130)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:163)
at javafx.scene.web.WebEngine$LoadWorker.updateState(WebEngine.java:975)
at javafx.scene.web.WebEngine$LoadWorker.dispatchLoadEvent(WebEngine.java:1086)
at javafx.scene.web.WebEngine$LoadWorker.access$600(WebEngine.java:968)
at javafx.scene.web.WebEngine$PageLoadListener.dispatchLoadEvent(WebEngine.java:955)
at com.sun.webpane.platform.WebPage.fireLoadEvent(WebPage.java:2356)
at com.sun.webpane.platform.WebPage.fwkFireLoadEvent(WebPage.java:2204)
at com.sun.webpane.webkit.network.URLLoader.twkDidFinishLoading(Native Method)
at com.sun.webpane.webkit.network.URLLoader.access$1300(URLLoader.java:44)
at com.sun.webpane.webkit.network.URLLoader$6.run(URLLoader.java:691)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:17)
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:67)
at java.lang.Thread.run(Thread.java:745)
Exception in thread "JavaFX Application Thread"