4

我可以拦截来自 UIWebView 的初始加载请求:

(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType.

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

4

3 回答 3

9

更新:另一个选项是用于NSURLProtocol听取应用程序发出的请求,包括来自 Web 视图的所有请求。


我会提出一个创造性的解决方案。这并不是您真正想要的,但由于此时使用 SDK 无法实现,因此这是唯一可能的解决方案。

@interface PrintingCache : NSURLCache
{
}
@end

@implementation PrintingCache

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

    return [super cachedResponseForRequest:request];
}
@end

现在在您的应用委托中,执行以下操作:

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。

于 2013-01-24T22:49:45.007 回答
1

试试下面的代码

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

希望它会帮助你。

于 2013-01-24T13:35:42.613 回答
-3

这有效:

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

确保你把webView.delegate = self;,[super viewDidLoad]否则它不会显示任何东西。

于 2013-01-24T21:56:23.827 回答