我有一个UIWebView
,我让它加载一个HTML字符串。该字符串包含图像的 http 网址。图像已加载,但不会为它们调用shouldStartLoadWithRequest:
方法。它只叫一次,about : blank
.但是,所有图像请求都已成功传递到我的NSURLCache
子类中,传递到cachedResponseForRequest:
方法中。但我想以shouldStartLoadWithRequest:
方法处理请求。对此有什么办法吗?如何使这些请求进入委托方法?
这是代码:
@interface URLCache : NSURLCache
@end
@implementation URLCache
- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request
{
NSLog(@"REQUEST = %@", request.URL);
return [super cachedResponseForRequest:request];
}
@end
@interface ViewController ()<UIWebViewDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[NSURLCache setSharedURLCache:[URLCache new]];
NSString* path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"];
NSString* html = [NSString stringWithContentsOfFile:path
encoding:NSUTF8StringEncoding
error:nil];
self.webView.delegate = self;
[self.webView loadHTMLString:html baseURL:nil];
}
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(@"URL = %@", request.URL);
return YES;
}
@end
shouldStartLoadWithRequest
方法仅在页面加载时调用(即,当页面作为一个整体加载或加载框架的内容时),而不是在加载单个资源(如图像、JavaScript 或 CSS 时)。
如果你想操纵来自UIWebView
的所有HTTP/HTTPS请求,我知道的唯一方法是使用自定义NSURLProtocol
子类。 有关如何执行此操作的示例,请参阅 Apple 的自定义 HTTP 协议示例代码项目。