在JavaFX Webview中自动单击元素[a]

时间:2014-11-03 09:31:26

标签: webview javafx

我正在使用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"

0 个答案:

没有答案