我的iOS应用中有一个UIWebview需要监控它所访问的每个页面的响应标头,我试图在
上查找它webViewDidFinishLoad
和
shouldStartLoadWithRequest
但还没有走得太远,进一步的研究引导我
didReceiveResponse
对于NSURLConnection,但我的理解是,这只能获得第一个响应,并且无法得到第二个或进一步的响应。
如果它有帮助,我正在使用Rubymotion来实现它。
答案 0 :(得分:3)
这是不可能的,我害怕。您可以使用JavaScript获取当前的网址:
https://stackoverflow.com/a/2494051/204044
(或JS可以访问的任何其他内容)......但是你无法获得标题。这是一件安全事。
如果您可以控制Web服务器,则可以在javascript对象中传递所需的信息,如下所示:
// In your webserver's code, assuming it's PHP:
<script type="text/javascript">
window.customDataString = "<?= $custom_data ?>";
</script>
// In Objective-C
NSString *customDataString = [webView stringByEvaluatingJavaScriptFromString:@"window.customDataString"];
答案 1 :(得分:2)
我通过使用AFNetworking做了类似的事情。
我使用webView:shouldStartLoadWithRequest:navigationType:来捕获用户点击的所有链接。我在shouldStartLoadWithRequest返回NO,因此UIWebview将保持空闲状态。然后,我获得NSURLRequest并获得我需要的所有内容,包括AFNetworking的HTML源代码。
最后,我通过loadHTMLString:baseURL:将HTML字符串放回UIWebView。
用户似乎像往常一样浏览网页。他们不知道我绕过UIWebview并只使用UIWebview来显示HTML。
答案 2 :(得分:0)
在委托中,注册您的自定义NSURLProtocol子类,然后您可以监视响应:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response