WKWebView
Posted 孤独的菜鸟----
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于WKWebView的主要内容,如果未能解决你的问题,请参考以下文章