从UIWebView中读取JSON内容

3
我正在使用UIWebView来显示验证码。如果用户输入正确的验证码,则服务器将返回JSON序列化数据。我不想在视图中显示它,而是想拦截UIWebView的加载。如果返回JSON序列化数据,我希望存储该数据并删除UIWebView。
我考虑设置一个委托到UIWebView,并使用它的webViewDidFinishLoad方法,但是如何获取已加载的内容呢?
2个回答

8
你可以考虑定义一个UIWebViewDelegate并使用 webView:shouldStartLoadWithRequest:navigationType:来拦截请求并处理它。在你的情况下,你需要评估NSURLRequest 并返回NO,以防止WebView加载。相应地,你会创建一个具有相同请求的单独的NSURLConnection,并设置代理来接收(JSON)响应。

1
@jarnoan,你想分享一下你的代码吗?我没有得到这个答案。 - R. Dewi

5
我想到了一个(也许不太优美的)解决方案:
我不是返回仅为json格式的响应,而是使用与验证码相同的HTML模板。如果验证码成功,我将想要发送的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
}

一般来说,我认为实现起来相当容易和直接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接