IOS: Object-C如何拦截UIWebView发出的请求?

我们在IOS App里潜入一个WebView,但有时候需要拦截页面发出的请求,做一些过滤或者转发,该怎么办呢?

Object-C如何拦截UIWebView发出的请求?

可以从NSURLCache作为切入点,不过NSURLCache拦截的是所有App的请求,这个后续在处理的时候需要注意下,免得漏掉或误杀。

首先需要在AppDelegate.m文件的didFinishLaunchingWithOptions方法增加如下代码: FilteredWebCache *cache = [[FilteredWebCache alloc] init]; [NSURLCache setSharedURLCache:cache];

那么重写NSURLCache的FilteredWebCache在哪里呢?请看下文,后续处理请求的逻辑切入点也在FilteredWebCache里面。

FilteredWebCache.h @interface FilteredWebCache : NSURLCache { } @end
FilteredWebCache.m #import "FilteredWebCache.h" @implementation FilteredWebCache - (NSCachedURLResponse*)cachedResponseForRequest:(NSURLRequest*)request { NSURL *url = [request URL]; NSLog(@"loading url: %@", url); return [super cachedResponseForRequest:request]; } @end

这样以来,我们就可以在cachedResponseForRequest方法里干自己的事情了。

相关阅读