WKWebView替换UIWebView

iOS8以后,苹果推出了新框架Webkit,提供了替换UIWebView的组件WKWebView。各种UIWebView的问题没有了,速度更快了,占用内存少了,一句话,WKWebView是App内部加载网页的最佳选择!
一、WKWebView新特性
在性能、稳定性、功能方面有很大提升(最直观的体现就是加载网页是占用的内存,模拟器加载百度与开源中国网站时,WKWebView占用23M,而UIWebView占用85M);
允许JavaScript的Nitro库加载并使用(UIWebView中限制);
支持了更多的HTML5特性;
高达60fps的滚动刷新率以及内置手势;
将UIWebViewDelegate与UIWebView重构成了14类与3个协议(查看苹果官方文档);
二、初始化

  1. 首先需要引入WebKit库

import

  1. 初始化方法分为以下两种
    // 默认初始化
  • (instancetype)initWithFrame:(CGRect)frame;
    // 根据对webview的相关配置,进行初始化
  1. 加载网页与HTML代码的方式与UIWebView相同,代码如下:
    WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds];
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]];
    [self.view addSubview:webView];
    三、 WKWebView的代理方法

  2. WKNavigationDelegate

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

// 页面开始加载时调用

  • (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;
    // 当内容开始返回时调用
  • (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;
    // 页面加载完成之后调用
  • (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;
    // 页面加载失败时调用
  • (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation;
    最主要的代理方法是截获URL页面跳转

pragma mark - WKNavigationDelegate

  • (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
    NSString *requestUrl = navigationAction.request.URL.absoluteString;
    if([requestUrl isEqualToString:_requestUrl]){
    decisionHandler(WKNavigationActionPolicyAllow);//允许加载URL 相当于webView的return Yes;

    }else{
    decisionHandler(WKNavigationActionPolicyCancel);// 相当于webView的return NO;
    }
    }

你可能感兴趣的:(WKWebView替换UIWebView)