Подтвердить что ты не робот

Как определить, когда Android WebView полностью загружен?

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

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

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

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

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

PictureListener.onNewPicture() - это срабатывает каждый раз, когда экран изменяется, а AFAICT - для каждого перенаправления. Как я узнаю, какая стрельба является последней?

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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