如何使用UIWebview for iOS App持续监控响应标头

时间:2013-01-28 07:07:10

标签: ios http-headers rubymotion

我的iOS应用中有一个UIWebview需要监控它所访问的每个页面的响应标头,我试图在

上查找它
webViewDidFinishLoad

shouldStartLoadWithRequest

但还没有走得太远,进一步的研究引导我

didReceiveResponse

对于NSURLConnection,但我的理解是,这只能获得第一个响应,并且无法得到第二个或进一步的响应。

如果它有帮助,我正在使用Rubymotion来实现它。

3 个答案:

答案 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