簡體   English   中英

使用WebEngine.executeScript()在JavaFX中執行Javascript

[英]Executing a Javascript in JavaFX using WebEngine.executeScript()

我想自動填充兩個文本字段,並模擬一個buttonclick來自動登錄網站。 我正在使用JavaFX WebView及其功能.executeScript()

這是到目前為止我得到的:(請參考Sergey Grinevs在此問題上的答案: 從JavaFX程序為WebView執行Javascript函數

        webEngine.load("websiteexample.com");
        webEngine.getLoadWorker().stateProperty().addListener(
            new ChangeListener<State>() {
                @Override
                public void changed(ObservableValue ov, State oldState, State newState) {
                   if (newState == State.SUCCEEDED) {
                        webEngine.executeScript(
                                "function login(user,pass){"
                                + " var usernameField = document.getElementById(\"username\");"
                                + " var passwordField = document.getElementById(\"password\");"
                                + " usernameField.value = user;"
                                + " passwordField.value = pass;"
                                + " var sButton = document.getElementById(\"submit\");"
                                + " sButton.click();"
                                + "}"
                                + "login('abc','123');");

                    }
                }
            });

到目前為止,這是可行的,但是Javascript將在無限循環中執行 我還不知道為什么會有一個監聽器。 需要說的是,從那以后,我已經將自己的腳本復制到Sergey Grinev的腳本中。 否則,只需調用executeScript,它將引發java.lang.reflect.InvocationTargetException等。

我如何在沒有永久循環的情況下執行腳本,為什么沒有偵聽器就無法運行腳本?

感謝您的閱讀和親切的問候

如果我理解您的問題,問題第二部分的答案“為什么沒有偵聽器不起作用”,是偵聽器通知您頁面已加載。 然后,它在加載成功時執行您指定的代碼( newState == State.SUCCEEDED )。 因此,有一個偵聽器,以便在WebEngine報告已加載頁面后立即運行您的代碼 如果沒有偵聽器,則必須基於其他事件來選擇何時運行代碼,例如在頁面加載后單擊按鈕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM