从UIWebView读取JSON内容

时间:2009-10-24 16:18:03

标签: iphone json uiwebview

我正在使用UIWebView来显示验证码。如果用户正确输入验证码,则服务器使用JSON序列化返回数据。我不希望视图显示这个,而是我想拦截UIWebView的负载,如果它返回JSON序列化数据,我想存储该数据并删除UIWebView。

我在考虑设置UIWebView的委托并使用它的webViewDidFinishLoad,但是如何加载内容呢?

2 个答案:

答案 0 :(得分:8)

您可能希望了解定义UIWebViewDelegate并使用 webView:shouldStartLoadWithRequest:navigationType:拦截请求并处理它。

在您的情况下,您将评估NSURLRequest并返回NO以阻止加载WebView。反过来,您将使用相同的请求创建单独的NSURLConnection,并设置委托以接收(JSON)响应。

答案 1 :(得分:5)

我想出了这个(也许不那么漂亮)的解决方案:

我使用的是与验证码相同的HTML模板,而不是返回仅限json的响应。如果验证码成功,我将我想要的json发送到HTML模板,该模板将其显示在带有ID的隐藏div中:

<html>
<body>

{% if captcha_success %}

<div id="json" style="display: none">{"jsonvalue":"{{result}}"}</div>

{% else %}

// display captcha as usual

{% endif %}

</body>
</html>

然后我可以使用:

获取webViewDidFinishLoad中的内容
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *res = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('json').innerHTML"];
NSDictionary *json = [[CJSONDeserializer deserializer] deserializeAsDictionary:[res dataUsingEncoding:NSUTF8StringEncoding] error:nil];
// more stuff
}

一般来说,我认为实施起来非常容易和直接。