Ich habe eine UIWebView
die eine HTML-Seite aufruft. Auf dieser Seite gibt es zwei Schaltflächen, nämlich Exit und Submit. Ich möchte nicht, dass die Benutzer auf die Schaltfläche "Beenden" klicken können, d. h. sobald die Seite fertig geladen ist (d. h. webViewDidFinishLoad
aufgerufen wird), verwende ich stringByEvaluatingJavaScriptFromString
um eine dieser Schaltflächen zu entfernen, indem Sie den HTML-Code manipulieren. Ich deaktiviere auch die Benutzerinteraktion auf der UIWebView
en webViewDidStartLoad
und aktivieren Sie sie wieder auf webViewDidFinishLoad
.
Das Problem, das sich mir stellt, ist, dass stringByEvaluatingJavaScriptFromString
dauert ein oder zwei Sekunden, und es scheint in einem eigenen Thread zu geschehen. Was also passiert ist, dass webViewDidFinishLoad
aufgerufen wird, wird die Benutzerinteraktion auf der UIWebView
und wenn der Benutzer schnell ist, kann er auf die Schaltfläche Beenden klicken, bevor stringByEvaluatingJavaScriptFromString
ist beendet. Unter stringByEvaluatingJavaScriptFromString
scheint in einem eigenen Thread zu laufen, ohne dass man weiß, wann er fertig ist (er ruft nicht webViewDidFinishLoad
), ist die einzige Möglichkeit, vollständig zu verhindern, dass Benutzer die Schaltfläche "Beenden" tippen, die ich sehen kann, um nur Benutzerinteraktion auf der UIWebView nach einer Verzögerung zu aktivieren, die unzuverlässig ist (wie kann ich wirklich wissen, wie lange zu verzögern?).
Liege ich richtig, dass stringByEvaluatingJavaScriptFromString
auf seinem eigenen Faden gemacht wird, und ich habe keine Möglichkeit, zu erkennen, wann es fertig ist? Haben Sie andere Vorschläge, wie man dieses Problem umgehen kann?
EDIT : Kurz gesagt, was ich wissen möchte, ist, ob es möglich ist, eine Option zu deaktivieren UIWebView
während stringByEvaluatingJavaScriptFromString
ausgeführt wird, und aktivieren Sie erneut die UIWebView
wenn das Javascript beendet ist.
EDIT 2: Es gibt einen Artikel hier, der zu implizieren scheint, dass Sie irgendwie die JS-Engine abfragen können, um zu sehen, wann sie fertig ist, aber ich kann keine anderen Referenzen finden, die dasselbe sagen: http://drnicwilliams.com/2008/11/10/to-webkit-or-not-to-webkit-within-your-iphone-app/
EDIT 3 Basierend auf der Antwort von Brad Smith, scheint es, dass ich tatsächlich wissen müssen, wenn die UIWebView beendet hat, selbst zu laden, nachdem das Javascript ausgeführt hat. Es sieht mehr und mehr wie ich muss nur eine Verzögerung von Sorten in dort setzen.