OTMWebView
是一个 UIWebView
子类,旨在为 iOS 带来一些 UIWebView
缺失的功能。
设置 OTMWebView
实例
#import <OTMWebView/OTMWebView.h>
OTMWebView *webView = [[OTMWebView alloc]initWithFrame:CGRectZero];
webView.delegate = ....;
webView.userAgent = @"My User Agent String";
OTMWebViewDelegate
#import <OTMWebView/OTMWebView.h>
-(void)webView:(OTMWebView *)webView didReceiveResponse:(NSURLResponse *)response forRequest:(NSURLRequest *)request {
if ([response.MIMEType isEqualToString:@"video/mp4"]) {
[webView stopLoading];
// Do something else...
}
}
-(void)webView:(OTMWebView *)webView documentTitleDidChange:(NSString *)title {
//Do something with new title...
}
-(void)webViewProgressDidStart:(OTMWebView *)webView {
// web view's main frame started loading a document
}
-(void)webViewProgressDidFinish:(OTMWebView *)webView {
// web view's document finished loading, as did all of its subresources
}
-(void)webView:(OTMWebView *)webView progressDidChange:(double)progress {
// Update some sort of progress indicator
}
Cocoapods 是安装 OTMWebView
的推荐方式。只需将 pod 'OTMWebView'
添加到您的 Podfile
中。
NSURLProtocol
截获 OTMWebView
的 URL 请求步骤
OTMWebView
的代理方法中:- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
NSURLProtocol
的 + (id)propertyForKey:(NSString *)key inRequest:(NSURLRequest *)request
在请求中设置一个属性,以便告诉我们的 NSURLProtocol
子类处理该请求。OTMWebView
实例NSURLProtocol
子类的类方法 + (BOOL)canInitWithRequest:(NSURLRequest *)request
中NSURLProtocol
的 + (id)propertyForKey:(NSString *)key inRequest:(NSURLRequest *)request
检查是否设置了忽略属性,如果是则返回 return NO
NSURLProtocol
的 + (id)propertyForKey:(NSString *)key inRequest:(NSURLRequest *)request
检查是否设置了处理请求属性,如果是则返回 return YES
mainDocumentURL
属性,看是否包含 OTMWebView
实例的标识符。如果是则返回 return YES
mainDocumentURL
属性被设置为 web 视图的主请求 URL。这允许我们识别 OTMWebView
实例。由于 OTMWebView
能够截获 web 视图的主请求及其子资源请求,因此它可以跟踪所有这些资源的下载进度,从而使其能够使用类似 Webkit 的算法来估计整个文档的加载进度。
OTMWebView 可在 MIT 许可下使用。有关更多信息,请参阅 LICENSE 文件。