Ho una visualizzazione Web nella mia applicazione in cui è aperto un sito (sempre uguale, è la mia pagina). Il sito ha un codice JS che carica alcune immagini dall'host remoto.Intercetta e sostituisce le richieste HTTP da WebView
Desidero intercettare le richieste a tali immagini (tramite pattern URL) e restituire il mio contenuto (ad esempio un'altra immagine) oppure lasciare la richiesta non trattata in base alla logica dell'applicazione interna.
È possibile farlo?
EDIT: Lo stato attuale della domanda ...
WebView
ha una capacità di impostare un WebViewClient
(come notato da Axarydax). WebViewClient
avere due metodi utili
shouldOverrideUrlLoading
onLoadResource
shouldOverrideUrlLoading
è in grado di intercettare qualsiasi URL di carico, se il caricamento è innescato da interazioni pagina (per esempio collegamento in una pagina viene cliccato, WebView.loadURL ("") non sta attivando questo metodo). È anche in grado di annullare il caricamento degli URL restituendo false. Questo approccio non è utilizzabile, perche 'non e' in grado di intercettare il caricamento delle risorse della pagina (e le immagini, quello che ho bisogno di intercettare, sono tali risorse di pagina).
onLoadResource
si attiva ogni volta che la risorsa della pagina (e le immagini! Thx su jessyjones) si stanno caricando, ma non c'è modo di annullarla. Questo rende questo metodo non adatto anche al mio compito.
Una parola di ATTENZIONE! Se intercetti un tentativo dal browser per recuperare un'immagine (o probabilmente qualsiasi risorsa) e quindi restituire "null" (ovvero consentire a WebView di continuare a recuperare l'immagine), eventuali richieste future a questa risorsa potrebbero semplicemente andare alla cache e NON attiveranno "shouldInterceptRequest()". vuoi intercettare OGNI richiesta di immagine, devi disabilitare la cache o (cosa ho fatto) chiamare 'WebView.clearCache (true)'. – ADDruid
Sto provando ad aggiungere cookie personalizzati e intestazioni aggiuntive Qualche idea su come si possa fare? – Karoly
Poiché API 24, la versione di 'shouldInterceptRequest' che richiede' String url' è deprecata. Per far fronte a questo, vedere questa domanda: https://stackoverflow.com/q/36484074/56285 (Riguardo alla deprecazione, ' shouldInterceptReque st' è analogo a 'shouldOverrideUrlLoading'.) – Jonik