¿Cómo determinar cuándo Android WebView está completamente cargado?

Quiero saber cómo determinar cuando un WebView está completamente cargado.

Permítanme definir completamente .

  • Todos los redireccionamientos han ocurrido
  • La página se muestra visiblemente, todavía no hay nada que cargar

Malas respuestas a esta pregunta:

WebViewClient.onPageFinished() – esto se WebViewClient.onPageFinished() varias veces si hay redirecciones al cargar una página. También se activa antes de que se muestre la página.

PictureListener.onNewPicture() – esto se dispara cada vez que cambia la pantalla y AFAICT cada redireccionamiento. ¿Cómo sabría qué disparo es el último?

WebChromeClient.onProgressChanged() – el mismo problema que onPageFinished. (Añadido después de que David sugirió esta solución a continuación)

Thread.sleep(5000) – debe ser obvio, por qué esto no es aceptable.

Por supuesto, una combinación inteligente de lo anterior que funciona sería perfecto.

¿Por qué quiero saber esto? Porque quiero inyectar un javascript una vez una vez que la webview está completamente cargado.

Gracias a David Caunt por su sugerencia de mirar los encabezados de respuesta.

He encontrado lo siguiente para trabajar bastante bien:

En lugar de tener webview realizar las solicitudes HTTP, hágalas usted mismo para que pueda comprobar el código de estado HTTP para los redireccionamientos. Siga la cadena de redirección. Cuando llegue a una solicitud que no sea una redirección, establezca una bandera y envíe los datos a la vista web a través de webview.loadDataWithBaseURL . El indicador se comprueba en WebViewClient.onPageFinished() para que sepa que se realizan todos los redireccionamientos. El javascript se puede inyectar en este momento. Por supuesto, la página en sí podría estar haciendo alguna manipulación de JavaScript en este punto, es difícil de saber, por lo que la adición de un retraso (digamos 500 ms) para el javascript permite que el DOM para resolver. setTimeout(function(){/* your code */}, 500) .

¿Ha estudiado cómo configurar su propio WebChromeClient?

Parece que onProgressUpdated puede informarle cuando una página se ha cargado completamente.

Este parece ser el método utilizado por el navegador integrado de Android.

  • Reemplazar o manejar el botón "Ir" en WebView
  • ¿Cómo acceder a elementos html contenidos dentro de una webview?
  • WebView lanza Receptor no registrado: android.widget.ZoomButtonsController
  • ¿Cómo mostrar una barra de carga al renderizar con Webview.loadUrl en android?
  • Web View Display "Android WebCore no es compatible en este caso" Advertencia
  • Clics no funciona en WebView
  • PictureListener está obsoleto y obsoleto, ¿hay un reemplazo?
  • LoadData intenta utilizar datos como url en la vista web
  • Destruir vista web en Android
  • Usando javascript en android webview
  • Pase un valor a loadURL - Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.