Android WebView + loadUrl с javascript + onPageFinished = задержка - PullRequest
7 голосов
/ 28 апреля 2011

У меня есть WebView, который загружает какую-то страницу, когда она заканчивается, я применяю магию javascript, чтобы портить DOM. Все хорошо, страница загружается и onPageFinished я просто звоню wv.loadUrl(javascript);

Но я не хочу видеть процесс загрузки, и как работает javascript, мне просто нужен результат, поэтому я сделал мой взгляд невидимым с помощью wv.setVisibility(View.INVISIBLE); с самого начала и снова сделал его видимым, когда все будет сделано. Вот где возникает проблема.

Этот фрагмент кода должен сделать видимость видимой после завершения работы javascript, но wv.setVisibility(View.VISIBLE) запускается перед использованием javascript. Так что на мгновение я вижу страницу и как она меняется с помощью JavaScript. Это просто безобразно.

  public void onPageFinished (WebView view, String url) {
         wv.loadUrl(javascript);
         view.getSettings().setLoadsImagesAutomatically(true);
         wv.setVisibility(View.VISIBLE);

    }

Я понял, что loadUrl работает асинхронно, поэтому я попытался создать еще один WebViewClient с помощью метода «make first view visible» внутри onPageFinished и использовать его для вызова JS. Но он просто продолжает сбой с ошибкой NPE.

wv2.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished (WebView view, String url) {
     wv.setVisibility(View.VISIBLE);
}
});

Пока я просто добавил задержку после javascript (SystemClock.sleep(5000)), но это похоже на ... да.

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

Хорошо, думаю, я понял это.У нас может быть обратный вызов с конца javascript, который будет запускать «представление представления» - как здесь или здесь (с обработчиком, потому что я хотел обновить пользовательский интерфейс).Но это ничего не изменит, похоже, проблема в скорости рендеринга.Это просто медленно.Так что сейчас я просто придерживаюсь 1-секундной задержки после запуска JS.

0 голосов
/ 28 апреля 2011

Я не думаю, что вы получите простое решение для этого.Все, что может обнаружить Android (как и большинство браузеров), - это когда страница полностью загружена, а это значит, что все загружено.Javascript ожидает его загрузки, и затем начинается запуск.Это просто так, как это работает.Единственное решение, которое я могу придумать, может быть только в JQuery.Я не знаю много об этом, но обычно есть решения для подобных вещей.

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