Android Webview - Изменение элементов с помощью Javascript после завершения загрузки страницы - PullRequest
0 голосов
/ 14 октября 2019

Я хочу изменить некоторые значения на странице HTML, используя Javascript в Webview. Я пробовал много разных способов оценить Javscript после того, как страница закончила загрузку.

Вот мой код:

    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setDomStorageEnabled(true);
    webview.getSettings().setBlockNetworkImage(false);

    webview.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }


        public void onPageFinished(WebView view, String url) {

            webview.loadUrl("javascript:(function() { document.getElementById('options').value = '" + found.getId() + "'; ;})()");
            button.performClick();

        }
    });

Я думаю, это означает, что метод вызывается рано, до того, как страница полностьюзагружен. У вас есть идеи?

1 Ответ

0 голосов
/ 15 октября 2019

Чтобы изменить значение / контент / стиль в HTML, используя javascript, также известный как DOM Manipulate , мы ждем, когда DOM будет готов или полностью загружен. В этом случае мы загружаем страницу в виджет WebView и затем делаем наше дело.

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

...

    final String url = "http://example.com";
    final WebView webview = findViewById(R.id.my_webview);
    final String myNewValue = "it works!";

    webview.getSettings().setJavaScriptEnabled(true);
    webview.setWebChromeClient(new WebChromeClient());
    webview.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            // Your custom javascript here
            String myCustomJS = "document.getElementById('options').innerHTML = '" +
                     myNewValue + "'";

            // here we execute the javascript code
            webview.loadUrl("javascript:(function(){" + myCustomJS + "})()");
        }
    });

    // and here we load the url
    webview.loadUrl(url);

...

Я надеюсь, что приведенный выше код поможет вам продолжить работу ..


Обновление для Ожидание готовности DOM

Если у вас естьиспользуйте jQuery раньше, тогда вы должны знать

// example 1: jQuery way
$(document).ready(function() {
    // place our logic here
});

// example 2: native javascript way
document.addEventListener('DOMContentLoaded', function() {
    // place our logic here
});

Я использую этот трюк для манипулирования страницей в WebView после готовности DOM (в примере 2 нативным способом JS).

Еще один вопрос, почему не использовать runnable?

, потому что мы никогда не знаем пользователей скорости Интернета, скажем, если мы установили runnable для ожидания 3000ms или 3sec но сеть не отвечает после запуска. Что случилось дальше? пользователи будут иметь белый пустой экран и будут ждать.

надеюсь, это станет более понятным.

ссылка: https://developer.mozilla.org/.../DOMContentLoaded_event

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