1

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

webViewDidFinishLoad

shouldStartLoadWithRequest

但还没有走远,进一步的研究使我

didReceiveResponse

对于 NSURLConnection,但我的理解是,这只能得到第一个响应,而不能得到第二个,或者进一步的响应。

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

4

3 回答 3

3

这是不可能的,我害怕。您可以使用 JavaScript 获取当前 Web URL:

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"];
于 2013-01-29T01:47:10.383 回答
2

我使用 AFNetworking 做了类似的事情。

我使用webView:shouldStartLoadWithRequest:navigationType:来捕获用户点击的所有链接。我在 shouldStartLoadWithRequest 返回 NO,因此 UIWebview 将保持空闲状态。然后,我得到 NSURLRequest 并得到我需要的一切,包括 AFNetworking 的 HTML 源代码。

最后,我通过loadHTMLString:baseURL:将 HTML 字符串放回 UIWebView 。

用户只是像往常一样浏览网页。他们不知道我绕过 UIWebview 而只是使用 UIWebview 来显示 HTML。

于 2013-01-29T03:10:04.653 回答
0

在委托中,注册您的自定义 NSURLProtocol 子类,然后您可以通过以下方式监控响应:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
于 2015-09-28T08:27:13.350 回答