Abfangen und Überschreiben von HTTP-Anfragen von WebView
Ich habe eine WebView in meiner Anwendung, in denen eine Seite geöffnet wird (immer das gleiche, es ist meine eigene Seite). Die Website hat einige JS-code, lädt ein paar Bilder vom remote-host.
Möchte ich abfangen von Anfragen an solche Bilder (URL-pattern) und geben wieder meine eigenen Inhalte (also ein anderes Bild), oder Abwesenheitsmitteilung unberührt abhängig von interner Anwendungslogik.
Ist es möglich, das zu tun?
BEARBEITEN: Der gegenwärtige Stand der Frage...
WebView
hat eine Fähigkeit, einen WebViewClient
(wie bereits von Axarydax). WebViewClient
zwei nützliche Methoden
shouldOverrideUrlLoading
onLoadResource
shouldOverrideUrlLoading
abfangen einer beliebigen url laden, wenn das laden ausgelöst wird, durch Seite-Interaktion (z.B. link auf einer Seite angeklickt wird, wird der WebView.loadURL("") ist nicht das auslösen dieser Methode). Es ist auch in der Lage zu stornieren URL laden durch Rückgabe von false. Dieser Ansatz ist nicht nutzbar, führen: "es ist nicht in der Lage, abzufangen laden der Seite Ressourcen (Bilder, was ich brauche, um abzufangen, ist so eine Seite Ressource).
onLoadResource
ist die Auslösung jedes mal, die Seite Ressource (und Bilder! thx an jessyjones) laden, aber es gibt keine Möglichkeit zu stornieren. Das macht diese Methode nicht geeignet für meine Aufgabe auch.
InformationsquelleAutor der Frage Olegas | 2011-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus wie API-level 11 hat die Unterstützung für das, was Sie brauchen. Sehen
WebViewClient.shouldInterceptRequest()
.InformationsquelleAutor der Antwort dkneller
Versuchen, diese, ich habe es in einem persönlichen wiki-like app:
InformationsquelleAutor der Antwort Axarydax
Soweit ich weiß, shouldOverrideUrlLoading wird nicht aufgerufen, für Bilder, sondern für die hyperlinks... ich denke, die entsprechende Methode ist
@Override
public void onLoadResource(WebView view, String url)
Diese Methode wird aufgerufen, für jede Ressource (Bild, styleesheet, Skript), das geladen von der webview, aber da es eine leere, habe ich nicht gefunden eine Weise zu ändern, dass die url und ersetzen Sie es, damit es lädt eine lokale Ressource ...
InformationsquelleAutor der Antwort jessyjones
Hier ist meine Lösung, die ich für meine app.
Ich habe mehrere asset-Ordner mit css /js /img-anf-schriftart-Dateien.
Die Anwendung erhält alle Dateinamen und schaut, ob eine Datei mit diesem Namen angefordert wird. Wenn ja, lädt er es aus dem asset-Ordner.
InformationsquelleAutor der Antwort EscapeNetscape
Sie nicht noch die API-version, aber seit API 11 es ist die Methode, die WebViewClient.shouldInterceptRequest
Vielleicht könnte dies helfen?
InformationsquelleAutor der Antwort
Ultimative Lösung wäre die Einbettung eines einfachen http-server lauscht auf Ihre "geheimen" port auf loopback. Dann können Sie Ersatz der matched-image src-URL mit so etwas wie http://localhost:123/.../mypic.jpg
InformationsquelleAutor der Antwort Sergey Emantayev
Dieser kann hilft:
InformationsquelleAutor der Antwort WCG