收听UIWebView的所有请求

时间:2013-01-24 13:19:00

标签: iphone uiwebview uiwebviewdelegate

我可以使用:

拦截来自UIWebView的初始加载请求
(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType.

如何记录我正在加载的页面中的所有请求?

3 个答案:

答案 0 :(得分:9)

更新:另一种选择是使用NSURLProtocol来听取应用程序发出的请求,包括Web视图中的所有请求。


我会建议一个有创意的解决方案。这不是你想要的,但是因为在这一点上使用SDK实际上不可能,这是唯一可行的解​​决方案。

@interface PrintingCache : NSURLCache
{
}
@end

@implementation PrintingCache

- (NSCachedURLResponse*)cachedResponseForRequest:(NSURLRequest*)request
{
    NSLog(@"url %@", request.URL.absoluteString);

    return [super cachedResponseForRequest:request];
}
@end

现在,在您的app delegate中,执行以下操作:

NSString *path = ...// the path to the cache file
NSUInteger discCapacity = 10*1024*1024;
NSUInteger memoryCapacity = 512*1024;

FilteredWebCache *cache = [[Printing alloc] initWithMemoryCapacity: memoryCapacity diskCapacity: discCapacity diskPath:path];
[NSURLCache setSharedURLCache:cache];

这会创建一个共享缓存,您的所有应用程序的URL请求都将通过此缓存,包括您的Web视图。但是,您可能会从其他来源获得更多您不想要的URL。

答案 1 :(得分:2)

尝试以下代码

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(@"url %@", [[request URL] absoluteString]);
return YES;
}
希望它会对你有所帮助。

答案 2 :(得分:-2)

这有效:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(@"url %@", [[request URL] absoluteString]);
return YES;
}

请务必将webView.delegate = self;放入[super viewDidLoad],否则不会显示任何内容。