Determining when stringByEvaluatingJavaScriptFromString has finished
Posted
by
alku83
on Stack Overflow
See other posts from Stack Overflow
or by alku83
Published on 2011-01-14T07:07:16Z
Indexed on
2011/01/15
2:53 UTC
Read the original article
Hit count: 275
I have a UIWebView
which loads up an HTML page. This page has two buttons on it, say Exit and Submit. I don't want users to be able to click the Exit button, so once the page has finished loading (ie. webViewDidFinishLoad
is called), I use stringByEvaluatingJavaScriptFromString
to remove one of these buttons, by manipulating the HTML. I also disable user interaction on the UIWebView
on webViewDidStartLoad
, and enable it again on webViewDidFinishLoad
.
The problem I am finding is that stringByEvaluatingJavaScriptFromString
takes a second or two to complete, and it seems to be done in it's own thread. So what is happening is that webViewDidFinishLoad
is called, user interaction is enabled on the UIWebView
, and if the user is quick, they can click the Exit button before stringByEvaluatingJavaScriptFromString
has finished. As stringByEvaluatingJavaScriptFromString
seems to be on it's own thread with no way to know when it's finished (it doesnt call webViewDidFinishLoad
), the only way to completely prevent users from tapping the Exit button that I can see is to only enable user interaction on the UIWebView after some delay, which is unreliable (how can I really know how long to delay for?).
Am I correct in that stringByEvaluatingJavaScriptFromString
is done on it's on thread, and I have no way of being able to tell when it's finished? Any other suggestions for how to get around this problem?
EDIT: In short, what I want to know is if it is possible to disable a UIWebView
while stringByEvaluatingJavaScriptFromString
is executing, and re-enable the UIWebView
when the javascript is finished.
EDIT 2: There's an article here which seems to imply you can somehow poll the JS engine to see when it's finished, but I can't find any other references saying the same thing: http://drnicwilliams.com/2008/11/10/to-webkit-or-not-to-webkit-within-your-iphone-app/
EDIT 3 Based on the answer from Brad Smith, it seems that I actually need to know when the UIWebView has finished loading itself after the javascript has executed. It's looking more and more like I just need to put a delay of sorts in there.
© Stack Overflow or respective owner