Android WebView и JavaScript программно нажатием кнопки не работают - PullRequest
1 голос
/ 03 июня 2019

У меня очень простой вариант использования, то есть программный вызов кнопки веб-страницы, загруженной в мое веб-представление.Ниже приведен код

webView.getSettings().setDomStorageEnabled(true);
        webView.getSettings().setAppCacheEnabled(false);
        webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient(){


            @Override
            public void onPageFinished(WebView view, String url) {
                //super.onPageFinished(view, url);
                switch (view.getOriginalUrl()){
                    case Properties.LOGIN_URL:

                        webView.evaluateJavascript(
                                "javascript:" +
                                        "var usernameField = document.getElementById('loginUserName');" +
                                        "usernameField.value = '" + Properties.USERNAME + "';" +
                                        "var passwordField = document.getElementById('loginPassword');" +
                                        "passwordField.value = '" + Properties.PASSWORD + "';", null
                        );

                        webView.evaluateJavascript(
                                "javascript:" +
                                        "document.getElementById('loginButton').click();", new ValueCallback<String>() {
                                    @Override
                                    public void onReceiveValue(String s) {

                                    }
                                }
                        );

                    break;
                }
            }
        });

view.loadUrl(Properties.LOGIN_URL);

Впрыск поля имени пользователя и пароля работает нормально, но код для выполнения нажатия кнопки не работает.Я много искал и много экспериментировал, но безуспешно. Возможно ли это?

РЕДАКТИРОВАТЬ: URL-адрес, к которому я обращаюсь, является частным для нашей организации, находится на http и не защищен, не уверен, что это актуально.

Я перепробовал другую общедоступную страницу с полями для входа, и тот же код работает, и кнопка успешно нажата.

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Хорошо, я нашел причину. Таким образом, onPageFinished вызывался, пока все элементы DOM не загружены, следовательно, JavaScript не работал. Пока он работает, я добавил задержанный обработчик с задержкой в ​​5 секунд, и он сработал. Правильное решение должно заключаться в проверке загрузки страницы для завершения (возможно, используйте jquery, чтобы проверить, когда документ готов).

0 голосов
/ 04 июня 2019

Вы можете обрабатывать кнопки веб-просмотра, щелкнув таким образом

@JavascriptInterface
public void handleClick(String id) {
    startActivity(new Intent(mContext, MainActivity.class));
}

В javascript

Android.handleClick(_id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...