Android WebView + loadUrl с javascript + onPageFinished = lag

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

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

Этот фрагмент кода должен wv.setVisibility(View.VISIBLE) видимым после завершения 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) ), но это похоже на … да.

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

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

Intereting Posts
Android Volley + Loader шаблон? Android – Как выполнить UnitTest класс Logging с mockito Как реализовать подробный для List <Long> Как я могу создать RecyclerView с изображением фиксированного размера, которое обертывает содержимое, а изображение центрируется по центру Как запустить Google Map API V2 на эмуляторе Android Как выбрать слово в веб-браузере Android? Обновлено приложение с картой v1 в google play, показывающее пустые фрагменты FragmentTabHost – нет закладки, известной для тега null Использование текста в качестве первичного ключа в таблице SQLite плохо? Плавающая метка с двумя editText Изменение z-индекса (z-порядок) маркера карты для Maps V2 в Android Андроид пароль или номер телефона для входа в систему Akquinet (Android с тестовым архетипом) – юнит-тесты не выполняются SurfaceTexture.OnFrameAvailableListener перестает быть вызванным Android: настройка вкладок в состоянии: как сделать селектор доступным