OTMWebView 0.0.4

OTMWebView 0.0.4

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2015年2月

Otium 维护。



OTMWebView 是一个 UIWebView 子类,旨在为 iOS 带来一些 UIWebView 缺失的功能。

功能

  • 进度跟踪
  • 设置来自 web 视图的所有请求的用户代理
  • 响应处理
  • 文档标题变更侦测

用法

设置 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 请求

步骤

  1. OTMWebView 的代理方法中:- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
    • 使用 NSURLProtocol+ (id)propertyForKey:(NSString *)key inRequest:(NSURLRequest *)request 在请求中设置一个属性,以便告诉我们的 NSURLProtocol 子类处理该请求。
    • 将标识符字符串附加到请求的 URL 片段组件,以便我们识别 OTMWebView 实例
  2. 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 文件。