1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

WebView mit Seite aus dem Netz aber mit eigener CSS

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von kleinerkathe, 29.03.2011.

  1. kleinerkathe, 29.03.2011 #1
    kleinerkathe

    kleinerkathe Threadstarter Android-Lexikon

    Beiträge:
    1,365
    Erhaltene Danke:
    219
    Registriert seit:
    23.01.2010
    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: 29.03.2011
  2. DieGoldeneMitte, 29.03.2011 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    So aus der Hüfte geschossen: In WebViewClient.shouldInterceptRequest() müsste man doch das Laden des CSS abfangen können.
     
  3. kleinerkathe, 29.03.2011 #3
    kleinerkathe

    kleinerkathe Threadstarter Android-Lexikon

    Beiträge:
    1,365
    Erhaltene Danke:
    219
    Registriert seit:
    23.01.2010
    Scheint genau das richtige zu sein :)
    Aber :( "Since: API Level 11"
     
  4. DieGoldeneMitte, 29.03.2011 #4
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Huch, wie kommt die Honeycomb Apidoc auf meinen Rechner? ;-)
     
  5. androdio, 10.11.2011 #5
    androdio

    androdio Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    10.11.2011
    hallo zusammen

    und wie ginge das genau mit loadDataWithBaseUrl(). wie kann ich da das css ersetzen. vielen dank!
     
  6. MichaelS, 11.11.2011 #6
    MichaelS

    MichaelS Fortgeschrittenes Mitglied

    Beiträge:
    370
    Erhaltene Danke:
    51
    Registriert seit:
    14.08.2009
    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
     
  7. androdio, 11.11.2011 #7
    androdio

    androdio Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    10.11.2011
    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
     
  8. MichaelS, 11.11.2011 #8
    MichaelS

    MichaelS Fortgeschrittenes Mitglied

    Beiträge:
    370
    Erhaltene Danke:
    51
    Registriert seit:
    14.08.2009
    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 ;)
     
    androdio bedankt sich.
  9. androdio, 13.11.2011 #9
    androdio

    androdio Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    10.11.2011
    Hallo Michael

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

    Gruss
    Stefan
     
  10. MichaelS, 13.11.2011 #10
    MichaelS

    MichaelS Fortgeschrittenes Mitglied

    Beiträge:
    370
    Erhaltene Danke:
    51
    Registriert seit:
    14.08.2009
    androdio bedankt sich.
  11. androdio, 13.11.2011 #11
    androdio

    androdio Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    10.11.2011
    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
     
  12. MichaelS, 13.11.2011 #12
    MichaelS

    MichaelS Fortgeschrittenes Mitglied

    Beiträge:
    370
    Erhaltene Danke:
    51
    Registriert seit:
    14.08.2009
    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
     
    androdio bedankt sich.
  13. androdio, 13.11.2011 #13
    androdio

    androdio Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    10.11.2011
    Hättest du da einen example für einen request. Danke!
     
  14. MichaelS, 14.11.2011 #14
    MichaelS

    MichaelS Fortgeschrittenes Mitglied

    Beiträge:
    370
    Erhaltene Danke:
    51
    Registriert seit:
    14.08.2009
    Habe ich dir bereits geschickt wie man ein HTTP Request macht :)
     
  15. androdio, 14.11.2011 #15
    androdio

    androdio Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    10.11.2011
    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?
     
  16. MichaelS, 14.11.2011 #16
    MichaelS

    MichaelS Fortgeschrittenes Mitglied

    Beiträge:
    370
    Erhaltene Danke:
    51
    Registriert seit:
    14.08.2009
    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
     
  17. androdio, 15.11.2011 #17
    androdio

    androdio Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    10.11.2011
    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
     
  18. nijoX, 15.11.2011 #18
    nijoX

    nijoX Junior Mitglied

    Beiträge:
    38
    Erhaltene Danke:
    5
    Registriert seit:
    06.09.2011
    Hallo androido,
    wie wäre es wenn du noch nen logcat Auszug sendest? damit kann dir besser geholfen werden :)

    MfG nijoX
     
  19. androdio, 15.11.2011 #19
    androdio

    androdio Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    10.11.2011
    Habe einen androi.os......networkonmainthreadexception wie kann ich am ohne fehlermeldung einen netzwerk request im main thread aufrufen. handler?
     
  20. androdio, 21.11.2011 #20
    androdio

    androdio Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    10.11.2011
    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!
     

Diese Seite empfehlen