WKWebView

WKWebView 是IOS8新增的 Web 浏览视图,因而都是对比UIWebView !!

WKWebView新特性

  • 在性能、稳定性、功能方面有很大提升(占有内存比WebView小, 缺点:不支持缓存和NSURLProtocol);
  • 允许JavaScript的Nitro库加载并使用(UIWebView中限制); 支持了更多的HTML5特性;
  • 高达60fps的滚动刷新率以及内置手势;
  • 增加estimatedProgress加载进度条;
  • 将UIWebViewDelegate与UIWebView重构成了14类与3个协议(官方文档);

创建方法

1 首先引入

#import <WebKit/WebKit.h>

2 初始化

- (instancetype)initWithFrame:(CGRect)frame;
- (instancetype)initWithFrame:(CGRect)frame 
configuration:(WKWebViewConfiguration *)configuration NS_DESIGNATED_INITIALIZER;

PS:2)是WKWebView的新增属性,通过这个方法,设置 configuration 让WKWebView知道一些缓存的状态,
configuration 可以通过已有的Cookie进行设置,也可以通过保存上一次的configuration进行设置。

3 创建UI

    _webShow = [[WKWebView alloc]initWithFrame:CGRectMake(0, 64, 320, 400)];
    _webShow.navigationDelegate = self;
    NSURL *url = [[NSURL alloc]initWithString:@"http://www.360doc.com/showWeb/0/0/512349271.aspx"];
    [_webShow loadRequest:[[NSURLRequest alloc]initWithURL:url]];

WKNavigationDelegate

该代理提供的方法,可以用来追踪加载过程(页面开始加载、加载完成、加载失败)、决定是否执行跳转。

- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation { 
// 类似UIWebView的 -webViewDidStartLoad:页面开始加载时调用
    NSLog(@"didStartProvisionalNavigation");  
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;  
}  

- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation {  
//内容开始返回时调用
    NSLog(@"didCommitNavigation");  
}  

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
 // 类似 UIWebView 的 -webViewDidFinishLoad:  页面加载完成时调用
    NSLog(@"didFinishNavigation");  
    [self resetControl];  
    if (webView.title.length > 0) {  
        self.title = webView.title;  
    }  
}  

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation 
withError:(NSError *)error {  
 // 类似 UIWebView 的- webView:didFailLoadWithError:页面加载失败时调用
    NSLog(@"didFailProvisionalNavigation");      
}  


- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse 
decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {  
//这个代理方法表示当客户端收到服务器的响应头,根据response相关信息,可以决定这次跳转是否可以继续进行
    decisionHandler(WKNavigationResponsePolicyAllow);  
}  

- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:
(WKNavigation *)navigation
{
//接收到服务器跳转请求之后调用
}
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:
(WKNavigationAction *)navigationAction 
decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {  
// 类似 UIWebView 的 -webView: shouldStartLoadWithRequest: navigationType: 
 在发送请求之前,决定是否跳转  
    NSLog(@"4.%@",navigationAction.request);   
    NSString *url = [navigationAction.request.URL.absoluteString 
stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    decisionHandler(WKNavigationActionPolicyAllow);  

}  
- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler {  

}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值