¿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 .
- Abrir PDF en WebView con un tamaño de archivo superior a 1 MB
- Aliasing del borde de radio de WebView de Android
- ¿Cómo puedo comprobar desde Android WebView si una página es una "página 404 no encontrada"?
- WebView - onReceivedHttpAuthRequest nunca se detiene
- Android - ¿Cómo puedo adjuntar un WebView a una actividad después de crearlo con el contexto de la aplicación
- 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.
- Interrupciones de la interfaz de Android 4.2.1, WebView y javascript
- Contenido wrap de WebView
- Cargar archivo somefile.html desde el almacenamiento interno a una vista web de una aplicación
- ¿Cómo habilitar los controles de zoom y el zoom de pellizco en un WebView?
- Programmatic haga clic en Android WebView
- Android: deshabilita la selección de texto en una vista web
- Actividad de la llamada de WebView SDK de Android
- Webview con interfaz de JavaScript
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.
- Biblioteca de Android Studio "error: el paquete no existe"
- No se pudo resolver: `com.google.android.gms: play-services-appindexing: 10.0.0`