ich möchte auf einer Website, die in meiner App mit WebView aufgerufen wird ein Suchen-Feld fülllen.
Leider besitzt dieses Feld obendrauf keine ID:
<input type="text" size="12" value="" name="keyword">
Du brauchst ein Javascript-Interface. Dann brauchst du noch eine Javascript-Funktion die dir das Feld setzt und vom Javascript-Interface den Wert bekommt.
Wie du in JS per Xpath arbeitest erfährst du hier, du kannst natürlich auch per JS-DOM das Problem lösen und die Methode getElementsByName vom document Objekt verwenden. Ist in dem Fall wahrscheinlich einfacher.
so... eine frage hätt ich noch:
so zum test hab ich mal die maketoast function probiert, weiß aber nicht wie ich die im code aufrufe das ich den text verändern kann
Allerdings hat das den Nachteil, dass du nie sicher weißt ob die Seite bereits aufgebaut wurde oder nicht. Hier erklärt sich dann auch warum ich vom Android-Interface gesprochen habe. Ich würde es so machen:
- Ein Java-Methode schreiben die den Wert für ein bestimmtes Form-Element returniert.
- Eine JS-Methode schreiben, die deine JS-Interface Methode aufruft um die Werte für deine Form-Elemente zu holen und im Code zu setzen.
- Die JS-Methode in einem onload-Handler registrieren.
Damit hättest du gleich mehrere Dinge sichergestellt:
- Der JS-Code ist in sich geschlossen und man sieht im JS-Code was passiert ohne den JAVA-Code anschauen zu müssen. In deiner Version ist die Web-App ja vom Java-Code abhängig der irgendwann die JS-Methode aufruft, imho sollte das umgekehrt sein.
- Du kannst dir sicher sein, dass die Elemente du benötigst bereits geladen wurden.
- Eine sauberere Trennung zwischen App- und Web-Code. (Wobei solche Misch-Apps sowieso immer zu Monster degenerieren.)
Allerdings hat das den Nachteil, dass du nie sicher weißt ob die Seite bereits aufgebaut wurde oder nicht. Hier erklärt sich dann auch warum ich vom Android-Interface gesprochen habe. Ich würde es so machen:
- Ein Java-Methode schreiben die den Wert für ein bestimmtes Form-Element returniert.
- Eine JS-Methode schreiben, die deine JS-Interface Methode aufruft um die Werte für deine Form-Elemente zu holen und im Code zu setzen.
- Die JS-Methode in einem onload-Handler registrieren.
Damit hättest du gleich mehrere Dinge sichergestellt:
- Der JS-Code ist in sich geschlossen und man sieht im JS-Code was passiert ohne den JAVA-Code anschauen zu müssen. In deiner Version ist die Web-App ja vom Java-Code abhängig der irgendwann die JS-Methode aufruft, imho sollte das umgekehrt sein.
- Du kannst dir sicher sein, dass die Elemente du benötigst bereits geladen wurden.
- Eine sauberere Trennung zwischen App- und Web-Code. (Wobei solche Misch-Apps sowieso immer zu Monster degenerieren.)