WebView mit Seite aus dem Netz aber mit eigener CSS

kleinerkathe

kleinerkathe

Dauergast
242
Hey,

kleines Problem:

Ich hab eine URL/Seite aus dem Netz, die lade ich jetzt per loadUrl.
Gibt es irgendeinen Befehl, dass ich eine zusätzliche CSS einbinden oder gar die vorhandene mit einer lokalen CSS überschreiben kann?


Kurz gesagt: Internetseite aus dem Netz + lokaler *.css, wie?

Den umständlichen Weg über loadDataWithBaseUrl() könnte ich gehen, aber ich will eigentlich nur(!) die CSS ersetzen und nicht auch alle images und sonstigen Medien :/

Zugriff auf die Webseite um extra CSS-Angaben oder sonst etwas hinzuzufügen hab ich nicht :/ Die Webseite "parsen" und den <style>-Tag würde ich eigentlich verhindern wollen, da mir das nicht als die einfachste Lösung erscheint ^^

//EDIT: Eine "schnelle" unschöne Lösung hätte ich schon mal: http://lexandera.com/2009/01/injecting-javascript-into-a-webview/
Aber da wird die Seite zuerst gerendert und angezeigt und *schwupp* danach die Sachen verändert :/
 
Zuletzt bearbeitet:
So aus der Hüfte geschossen: In WebViewClient.shouldInterceptRequest() müsste man doch das Laden des CSS abfangen können.
 
Scheint genau das richtige zu sein :)
Aber :( "Since: API Level 11"
 
Huch, wie kommt die Honeycomb Apidoc auf meinen Rechner? ;-)
 
hallo zusammen

und wie ginge das genau mit loadDataWithBaseUrl(). wie kann ich da das css ersetzen. vielen dank!
 
Es gibt mehrere Möglichkeiten:

1. Du rufst die HTML Seite manuell ab und setzt ein style tag mit deinem css in den html code oder du ersetzt einfach eine css datei mit einer die online ist oder so.
2. Du fügst wenn die Seite geladen ist dein css block in die Page (Damit kann es passieren, dass zuerst der alte stand sichtbar ist)
3. Um das Laden nicht manuell zu machen müsstest du den CacheManager austricksen und die CacheDB faken mit deinem Inhalt für Xy.css die die Website anfordert. (Habe ich schon gemacht klappt wunderbar)

Gruß
Michael
 
Hallo Michael

Danke für deine Antworten.

1. Geht nicht. Habe keinen Zugriff auf die aspx datei.
2. unschöne lösung.
3. klingt nicht schlecht. nur habe ich gelesen das der cache access demnächst nicht mehr möglich sein wird.

Dann muss ich wohl bis ice cream sandwich warten, shouldInterceptRequest() anwenden .kann ich da daten aus dem string löschen und einen neuen css tag einfügen?

Gruss
Stefan
 
1. geht wohl du kannst doch statt die url im webbrowser zu laden einfach nen eigenen request machen und die bytes lesen und dann den content direkt in eine webview übergeben.

ansonsten die methode von ICS verwenden da kannst du jeden request abfangen und verändern ;)
 
  • Danke
Reaktionen: androdio
Hallo Michael

Wie geht denn das mit request, ohne die seite zu laden. Hast da ein sample? Vielen Dank.

Gruss
Stefan
 
Danke, habe das jetzt soweit hingekriegt. Nur wird das natürlich umständlich mit den Bilder und den <form> daten.

Wie würde das mit dem shouldinterceptrequest genau funktionieren?

Du bist mir wirklich eine grosse Hilfe.

Gruss vom Android beginner!
Stefan
 
Die Methode ab API 11 is ziemlich genial :) Da bekommst du jeden Request und kannst selber entscheiden was du ihm zurück lieferst. Entweder ganz normal weiter arbeiten lassen oder wenn er z.B. "app.css" anfordert, lieferst du ihm einfach deine eigene aus. Denkbar wäre auch die original zu downloaden sie zu modifizieren und diese dann auszuliefern :)

Wäre deutlich dynamischer und hübscher ^^ leider erst ab API11
 
  • Danke
Reaktionen: androdio
Hättest du da einen example für einen request. Danke!
 
Habe ich dir bereits geschickt wie man ein HTTP Request macht :)
 
Ja,danke.funktioniert auch bei mir.ausser die links müssen angepasst werden, damit ich die Bilder seue. Meine Frage ist nun, wie der Request in Zusammenhang mit der shouldinterceptrequest Methode funzt. Gebe ich dem webviewclient damit bekannt,dass ich einen request gemacht habe?
 
Du musst natürlich beim setzen des HTML Codes der Webview sagen welchen basepfad sie hat sprich Parallels Confixx wäre der basepfad ansonsten können relative bilder nicht dargestellt werden. wenn du den weglässt, probiert er bilder zu laden wie "/images/muh.png" statt http://muh.de/images/muh.png
 
Vor wenigen Tagen funktionierte diese Funktion noch: jetzt stürzt mir die app dauernd ab deswegen.

private String getP() {
String str = "***";

try
{
HttpClient hc = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.yahoo.com");

HttpResponse rp = hc.execute(post);

if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
{
str = EntityUtils.toString(rp.getEntity());
}
}catch(IOException e){
e.printStackTrace();
}

return str;
}

hast du eine idee? Danke
 
Hallo androido,
wie wäre es wenn du noch nen logcat Auszug sendest? damit kann dir besser geholfen werden :)

MfG nijoX
 
Habe einen androi.os......networkonmainthreadexception wie kann ich am ohne fehlermeldung einen netzwerk request im main thread aufrufen. handler?
 
ich habs mehr oder weniger hingekriegt mit einem handler. wie macht man das genau mit dem shouldinterceptrequest(view, url)? kann mir da jemand ein beispiel aufzeigen. danke vielmals!
 

Ähnliche Themen

FabianDev
Antworten
5
Aufrufe
547
swa00
swa00
R
Antworten
3
Aufrufe
1.614
Ritartet
R
B
Antworten
4
Aufrufe
470
bb321
B
Zurück
Oben Unten