Как определить, когда Android WebView полностью загружен? - PullRequest
26 голосов
/ 08 апреля 2011

Я хочу знать, как определить, когда WebView полностью завершена загрузка.

Позвольте мне определить полностью .

  • Все перенаправления произошли
  • Страница визуально отображается, пока ничего не загружается

Плохие ответы на этот вопрос:

WebViewClient.onPageFinished() - это срабатывает несколько раз, если есть перенаправления, загружающие страницу. Он также срабатывает до отображения страницы.

PictureListener.onNewPicture() - срабатывает каждый раз, когда экран меняется, и УЖАСИТ при каждом перенаправлении. Откуда мне знать, какая стрельба является последней?

WebChromeClient.onProgressChanged() - та же проблема, что и для onFageFinished. (Добавлено после того, как Дэвид предложил это решение ниже)

Thread.sleep(5000) - должно быть очевидно, почему это не приемлемо.

Конечно, умная комбинация вышеперечисленного, которая работает, будет идеальной.

Почему я хочу знать это, спросите вы? Потому что я хочу добавить javascript один раз после того, как веб-просмотр полностью завершена загрузка.

Ответы [ 2 ]

8 голосов
/ 11 апреля 2011

Спасибо Дэвиду Каунту за предложение посмотреть на заголовки ответа.

Я нашел, что следующее работает очень хорошо:

Вместо того, чтобы веб-просмотр выполнял HTTP-запросы, выполняйте их самостоятельно, чтобы вы могли проверить код состояния HTTP на предмет перенаправлений. Следуйте цепочке перенаправления. Когда вы получаете запрос, который не является перенаправлением, установите флаг и отправьте данные в веб-просмотр через webview.loadDataWithBaseURL. Флаг установлен в WebViewClient.onPageFinished(), поэтому он знает, что все перенаправления выполнены. Javascript может быть введен в этот момент. Конечно, в данный момент сама страница может выполнять некоторые манипуляции с javascript, это трудно понять, поэтому добавление задержки (скажем, 500 мс) в javascript позволяет установить DOM. setTimeout(function(){/* your code */}, 500).

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

Вы смотрели на настройку собственного WebChromeClient?

Похоже, что onProgressUpdated может сообщить вам, когда страница полностью загрузилась.

Это, кажется, методиспользуется встроенным браузером Android.

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