Ich habe eine UIWebView
, die eine HTML-Seite lädt. Diese Seite hat zwei Schaltflächen, sagen Sie Exit und Submit. Ich möchte nicht, dass Benutzer in der Lage sind, auf die Schaltfläche Beenden zu klicken. Sobald die Seite fertig geladen ist (z. B. webViewDidFinishLoad
heißt), verwende ich stringByEvaluatingJavaScriptFromString
, um eine dieser Schaltflächen zu entfernen, indem ich HTML manipuliere. Ich deaktiviere auch die Benutzerinteraktion unter UIWebView
unter webViewDidStartLoad
und aktiviere sie erneut unter webViewDidFinishLoad
.Ermitteln, wann stringByEvaluatingJavaScriptFromString beendet ist
Das Problem, das ich finde, ist, dass stringByEvaluatingJavaScriptFromString
dauert eine Sekunde oder zwei zu vervollständigen, und es scheint in seinem eigenen Thread getan werden. Was also passiert, ist, dass webViewDidFinishLoad
aufgerufen wird, Benutzerinteraktion ist auf der UIWebView
aktiviert, und wenn der Benutzer schnell ist, können sie auf die Schaltfläche Beenden klicken, bevor stringByEvaluatingJavaScriptFromString
beendet ist. Wie stringByEvaluatingJavaScriptFromString
scheint auf seinem eigenen Thread mit keine Möglichkeit zu wissen, wenn es fertig ist (es ruft nicht webViewDidFinishLoad
), die einzige Möglichkeit, vollständig zu verhindern, dass Benutzer tippen auf die Schaltfläche Beenden, die ich sehe, ist nur Benutzerinteraktion auf dem UIWebView nach aktivieren etwas Verzögerung, die unzuverlässig ist (wie kann ich wirklich wissen, wie lange man warten muss?).
Bin ich richtig, dass stringByEvaluatingJavaScriptFromString
ist getan, es ist auf Thread, und ich habe keine Möglichkeit zu sagen, wenn es fertig ist? Irgendwelche anderen Vorschläge, wie man dieses Problem umgehen kann?
EDIT: Kurz gesagt, was ich wissen will, ist, wenn es möglich ist, ein deaktivieren UIWebView
während stringByEvaluatingJavaScriptFromString
ausgeführt wird, und aktivieren Sie die UIWebView
wenn die Javascript fertig ist.
EDIT 2: Es gibt hier einen Artikel, den Sie irgendwie scheint zu implizieren, können die JS-Engine abfragen, um zu sehen, wenn es fertig ist, aber ich kann keine andere Referenzen sagt die gleiche Sache finden: 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 wirklich wissen muss, wenn das UIWebView geladen hat, nachdem das Javascript ausgeführt wurde. Es sieht mehr und mehr so aus, als müsste ich nur eine Art Verzögerung einbringen.
gleiches Problem hier! Was war deine Lösung? –
Ich glaube, ich musste darauf zurückgreifen, nur anzunehmen, dass es eine gewisse Zeit dauern würde, und meine Verarbeitung um mindestens diese Zeitspanne zu verzögern. –
Gleiches Problem. Autsch, es muss einen besseren Weg geben, dies zu tun. –