确定stringByEvaluatingJavaScriptFromString何时完成

Ben*_*ams 13 javascript iphone uiwebview

我有一个UIWebView加载HTML页面.此页面上有两个按钮,例如退出和提交.我不希望用户能够单击"退出"按钮,因此一旦页面完成加载(即webViewDidFinishLoad调用),我stringByEvaluatingJavaScriptFromString就会通过操作HTML来删除其中一个按钮.我还禁用了UIWebViewon 上的用户交互webViewDidStartLoad,并再次启用它webViewDidFinishLoad.

我发现的问题是stringByEvaluatingJavaScriptFromString需要一两秒才能完成,而且它似乎是在它自己的线程中完成的.所以正在发生的事情就是webViewDidFinishLoad调用,启用了用户交互UIWebView,如果用户很快,他们可以在stringByEvaluatingJavaScriptFromString完成之前单击"退出"按钮.至于stringByEvaluatingJavaScriptFromString似乎是在它自己的线程,没有办法知道它结束时(它不调用webViewDidFinishLoad),彻底防止用户轻敲退出按钮,我可以看到的唯一方法是只允许在一个UIWebView用户交互的一些延迟之后,这是不可靠的(我怎么能真正知道延迟多久?).

我是正确的,因为stringByEvaluatingJavaScriptFromString它是在线程上完成的,我无法告诉它何时完成?关于如何解决这个问题的任何其他建议?

编辑:简而言之,我想知道的是,是否可以禁用一段UIWebView时间stringByEvaluatingJavaScriptFromString执行,并重新启用UIWebViewjavascript完成时.

编辑2:这里有一篇文章,这似乎意味着你能以某种方式查询JS引擎看的时候,它的完成,但我无法找到任何其他文献说同样的事情:http://drnicwilliams.com/2008/11/ 10 /对WebKit的或而不是对WebKit的范围内,您的-iphone,应用程序/

编辑3基于Brad Smith的答案,似乎我真的需要知道UIWebView在javascript执行后何时完成加载.它看起来越来越像我只需要在那里放一些延迟.

Bra*_*Guy 2

您可以将 javascript 注入到页面中,尝试在其他地方导航页面 (document.location="foo"),然后使用 webView:ShouldLoadRequest: 查找该请求并返回 no 并触发您需要的内容(通常返回 yes)。