Tengo una vista web en mi aplicación en la que se abre un sitio (siempre igual, es mi propia página). El sitio tiene un código JS que carga algunas imágenes desde el host remoto.Interceptar y anular solicitudes HTTP de WebView
Quiero interceptar solicitudes a tales imágenes (por patrón de URL) y devolver mi propio contenido (es decir, otra imagen) o dejar la solicitud intacta dependiendo de la lógica de la aplicación interna.
¿Es posible hacer eso?
EDITAR: El estado actual de la cuestión ...
WebView
tiene una capacidad de establecer una WebViewClient
(según lo observado por Axarydax). WebViewClient
tener dos métodos útiles
shouldOverrideUrlLoading
onLoadResource
shouldOverrideUrlLoading
es capaz de interceptar cualquier carga url, si la carga es provocada por la interacción de página (es decir, se hace clic en enlace en una página, WebView.loadURL ("") no está activando este método). También puede cancelar la carga de URL al devolver falso. Este enfoque no es utilizable, porque 'no es capaz de interceptar la carga de los recursos de la página (y las imágenes, lo que necesito interceptar, es un recurso de esa página).
onLoadResource
se activa cada vez que se carga ese recurso de página (y las imágenes! Thx a jessyjones), pero no hay forma de cancelarlo. Eso hace que este método no sea adecuado para mi tarea también.
¡Una palabra de PRECAUCIÓN! Si intercepta un intento del navegador para recuperar una imagen (o probablemente cualquier recurso) y luego devolver 'null' (lo que significa que la WebView continuará recuperando la imagen), cualquier solicitud futura a este recurso podría ir a la caché y NO activará' shouldInterceptRequest() '. desea interceptar CADA solicitud de imagen, necesita desactivar el caché o (lo que hice) llamar a 'WebView.clearCache (true)'. – ADDruid
Estoy tratando de agregar cookies personalizadas y encabezados adicionales. ¿Alguna idea de cómo se podría hacer eso? – Karoly
Desde la API 24, la versión de 'shouldInterceptRequest' que toma' String url' está en desuso. Para tratar con eso, vea esta pregunta: https://stackoverflow.com/q/36484074/56285 (Con respecto a la desaprobación, ' shouldInterceptReque st' es análogo a 'shouldOverrideUrlLoading'.) – Jonik