1. kleinerkathe, 29.03.2011 #1
    kleinerkathe

    kleinerkathe Threadstarter Android-Lexikon

    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

    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

    Scheint genau das richtige zu sein :)
    Aber :( "Since: API Level 11"
     
  4. DieGoldeneMitte, 29.03.2011 #4
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Huch, wie kommt die Honeycomb Apidoc auf meinen Rechner? ;-)
     
  5. androdio, 10.11.2011 #5
    androdio

    androdio Neuer Benutzer

    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

    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

    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

    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 gefällt das.
  9. androdio, 13.11.2011 #9
    androdio

    androdio Neuer Benutzer

    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

    androdio gefällt das.
  11. androdio, 13.11.2011 #11
    androdio

    androdio Neuer Benutzer

    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

    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 gefällt das.
  13. androdio, 13.11.2011 #13
    androdio

    androdio Neuer Benutzer

    Hättest du da einen example für einen request. Danke!
     
  14. MichaelS, 14.11.2011 #14
    MichaelS

    MichaelS Fortgeschrittenes Mitglied

    Habe ich dir bereits geschickt wie man ein HTTP Request macht :)
     
  15. androdio, 14.11.2011 #15
    androdio

    androdio Neuer Benutzer

    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

    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

    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

    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

    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

    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!