• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

UIWebView + Java Script

TroRon

Empire
Registriert
09.09.10
Beiträge
88
Hallo zusammen ...

Ich habe, zu Übungszwecken, eine App erstellt in welcher ich eine WebSeite via UIWebView darstelle. Das funktioniert, auch ohne Probleme.

Die dargestellte WebSite verwendet jedoch eine Schaltfläche bei welcher nach einem Klick eine JAVA Funktion ausgeführt wird um eben diese Ansicht umzuschalten.

Frage:
Gibt es eine Möglichkeit, diese Schaltfläche in meiner App zu "drücken", bzw. den Java-Code aus meiner App heraus auszuführen?

Ich muss dazu noch sagen, dass ich auf den Quellecode der angezeigten Seite keinen Einfluss nehmen kann.

Ich hoffe, ich konnte mich einigermassen verständlich ausdrücken und hoffe auf sinvolle Feedback's.

Bis dahin, schon mal besten Dank für Eure Bemühungen ...
 

Miralem23

Kaiser Wilhelm
Registriert
24.11.08
Beiträge
178
Handelt es sich nun um Java oder um JavaScript ? Ist ein sehr großer Unterschied, und dass muss erstmal geklärt werden ;)
 

TroRon

Empire
Registriert
09.09.10
Beiträge
88
Du hast recht :)

Es handelt sich dabei um eine Java-Script Funktion :)))


Sent from my iPhone using Tapatalk
 

TroRon

Empire
Registriert
09.09.10
Beiträge
88
Hallo zusammen....

So, bin nun ein bisschen schlauer :)

Also, meine View lade ich hiermit:

// Darstellen WebStream
[webDisplay loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:URL]]];

das funktioniert einwandfrei.

Dann habe ich noch einen Button definiert, der folgenden Befehl ausführt:

[webDisplay stringByEvaluatingJavaScriptFromString:mad:"switchview()"];

Auch das funktioniert.

Allerdings ist mein Ziel folgendes:

Die View lädt und führt den zweiten Befehl im Anschluss ebenfalls aus.

Aber genau das will einfach nicht klappen.

Hat hier jemand eine Idee für mich??
 

TroRon

Empire
Registriert
09.09.10
Beiträge
88
Hallo MacApple

Danke für Deine Antwort.

Nun ich habe beim Laden der View eigentlich das hier versucht:

// Darstellen WebStream
[webDisplay loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:URL]]];
[webDisplay stringByEvaluatingJavaScriptFromString:mad:"switchview()"];

Allerdings wird der zweite Befehl nicht ausgeführt, obwohl er korret ist. Gleicher Befehl mit einem Button verknüpft tut, was er tun soll.

Verstehe ich nicht :(
 

karolherbst

Danziger Kant
Registriert
11.05.07
Beiträge
3.878
du hast da ein klares Synchronisationsproblem.

Wenn du einen Request absetzt, dann wird auch nur genau das getan: Eine Anforderung an einen Server. Wann du jetzt aber Daten zurück bekommst, weiß du nicht. Darum führst du eine JavaScript Funktion genau dann aus, nachdem du eine Aufforderung getätitgt hast. In den meisten Fällen, ist die Homepage noch nicht geladen, heißt das Programm hat keine Ahnung, was es mit deinere JS Anweisung machen soll.

Richtig wäre, über ein Callback, Event oder was auch immer, diese Methode "nach" dem vollständigen Laden der Webseite auszuführen.

Wenn du diese Methode bei einem Button ausführst, bist du genau an dem Zeitpunkt, wo die Seite vollständig geladen ist, darum klappt das dann.
 

TroRon

Empire
Registriert
09.09.10
Beiträge
88
Hallo karolherbst

Sowas habe ich beinahe vermutet.

Allerdings habe ich bei meinen Recherchen viel darüber gelesen, dass man das mit einer Funktion ähnlich viewDidLoad finishes oder so hinbekommen soll. Aber die Implementation hat irgendwie nicht funkioniert.

Hast Du mir diesbezüglich noch einen Tipp?

Ist schwer so ein anfang ;) Aber gute Lektüre und viel, viel Lesen und noch viel mehr Fehlermeldungen fördern die Lernkurve ;)
 

karolherbst

Danziger Kant
Registriert
11.05.07
Beiträge
3.878
leider habe ich mit Cocoa noch relativ wenig gemacht und dann auch eher Systemprogrammierung und kaum GUI. Aber du müsstest glaube ich einen Delegate setzen, der eben die Methode viewDidLoadfinishes implementiert, der dann die Aufgabe übernimmt die richtigen Methoden auszuführen. Aber da können dir erfahrene ObjC Programmiere mehr zu sagen.
 

TroRon

Empire
Registriert
09.09.10
Beiträge
88
Danke für Deine Antwort.

Ich hoffe, es meldet sich noch jemand zu Wort :)

Werde Deinen Ansatz heute Abend aber sicher mal weiterverfolgen. Scheint schlüssig zu sein :)

Besten Dank.
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Jupp, da gibt es diese Delegate Methode, in der Du dann das Javascript anstoßen kannst.

MacApple
 

TroRon

Empire
Registriert
09.09.10
Beiträge
88
Genau dort habe ich mich auch schlau gemacht. :)

Zum testen habe ich eine ein NSLog Eintrag erstellt, dieser wurde aber nie geschrieben.

Also irgendwie wird das bei mir einfach nicht ausgeführt, aber den Grund dafür verstehe ich nicht...
 

TroRon

Empire
Registriert
09.09.10
Beiträge
88
Hmmm, also bitte nicht hauen, aber so wie ich das verstanden zu haben glaube, müsste webViewDidFinishLoad doch einfach so funktionieren.

Das laden klappt ja schliesslich auch einwandfrei.

Oder stehe ich jetzt gerade irgendwie gewaltig auf dem Schlauch???

bin immer verwirrter ...... :)
 

karolherbst

Danziger Kant
Registriert
11.05.07
Beiträge
3.878
die viewDidLoadfinishes Methode wird dann aufgerufen, wenn durch ein entsprechendes Event dem Delegate mitgeteilt wird, dass er die Methode aufrufen soll. Diese benachrichtigung kommt gewöhnlicherweise dann, wenn eine Seite vollständig geladen wurde.

Hast du auch "GENAU" für diese Methodensignatur - (void)webViewDidFinishLoad:(UIWebView *) eine Methode im Delegate implementiert? Wenn ja, was ist dein Delegate, oder hast du ihn gesetzt? Im Normalfall müsste die View selbst sein eigenes Delegate sein, wenn es nicht entsprechend gesetzt wurde. Also hat du in der View eine Methode mit dieser Signatur implementiert? (letzteres ist eine Annahme von mir)
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Nein Delegating funktioniert nicht „einfach so“. Du musst dem delegierenden Objekt schon sagen, an wen es delegieren soll.

MacApple
 

karolherbst

Danziger Kant
Registriert
11.05.07
Beiträge
3.878
okay, dann hat sich meine Annahme bestätigt. Um es einfacher zu machen, kannst du ja ein delegate:self machen ;) Solltest du dir aber nicht angewöhnen. Mir fällt aber grade nicht ein, inwiefern man den Delegate richtig setzt, habe das mal gemacht ist aber schon etwas her.
 

TroRon

Empire
Registriert
09.09.10
Beiträge
88
@karolherbst
Nun verstehe ich nur noch Bahnhof ......

@MacApple
Schön, noch mehr zu lesen, Danke :)

Ich glaube ich muss mich zuerst mal intensiver damit auseinandersetzen, sonst wird das so nichts .....
 

TroRon

Empire
Registriert
09.09.10
Beiträge
88
Hihi, dann wird vermutlich genau das mein Problem sein :)