美文网首页iOS 深度好文
WKWebView基础使用与WKNavigationDelega

WKWebView基础使用与WKNavigationDelega

作者: 呆呆羞 | 来源:发表于2017-06-16 11:11 被阅读0次

WKWebView基础使用

本文主要讲解WKWebView基础使用,同时加入了自己对WKNavigationDelegate的理解。
也不知道对不对,就是说得简单点。希望可以帮助更多人。
注意添加

import <WebKit/WebKit.h>

如果哪里理解错误,请一定留言指出。
源代码点击下载(编写环境Xcode8.3)

如果直接新建目录,复制本文代码,粘贴无法正常加载的朋友.可以参考这个看看有没有配置为YES

Snip20170616_1.png
#import "ViewController.h"

#import <WebKit/WebKit.h>

@interface ViewController ()<WKNavigationDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // 一定要加http://
    NSString *str=@"http://www.jianshu.com/u/ef6beb7b99a3";
    
    NSURL *url =[NSURL URLWithString:str];
    NSURLRequest * urlRequest=[NSURLRequest requestWithURL:url];
    
    WKWebView *wkWebView=[[WKWebView alloc]init];
    wkWebView.backgroundColor=[UIColor blueColor];
    
    wkWebView.frame=self.view.bounds;
    
    [wkWebView loadRequest:urlRequest];
    // 打开左右滑动,支持前进后退功能:默认为�NO
    wkWebView.allowsBackForwardNavigationGestures =YES;
    
    // 关闭顶部和尾部的下滑上滑,反弹动画效果。默认为YES
    wkWebView.scrollView.bounces=YES;

    wkWebView.navigationDelegate=self;
    
   
    [self.view addSubview:wkWebView];
    
}

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
    /*官方解释:决定是否允许或取消导航(继续加载)。
     您的委托可以立即调用块或保存块并在稍后时间异步调用它。
     可以理解成就是比如,一个想要加载URL前,想做点其他事时候才调用。
     
     实际应用中,比如
     1.通过一个判断一个合法URL,是否需要拉起支付宝app
     2.需求:判断加载的url包含XXXX字符,全部屏蔽掉,并跳转到相应的界面
     下面的其他代理方法都可以铺抓到加载的URL,为什么要在此方法开始做处理。
     原因,该代理方法,就是要在webview加载前拦截下来,第一时间处理,节省内存等。
     */

    NSLog(@"捕抓当前页面来源的url=%@",webView.URL.absoluteString);
    NSLog(@"铺抓当前页面的请求URL=%@",navigationAction.request.URL);
    WKNavigationActionPolicy Cancel = WKNavigationActionPolicyCancel;//    取消导航

    WKNavigationActionPolicy Allow = WKNavigationActionPolicyAllow;//    允许导航
    NSLog(@"11111");
    
    decisionHandler(Allow);
    
}
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{
    /*官方解释:
     决定是否在其响应已知后允许导航或取消导航。
     您的委托可以立即调用块或保存块并在稍后时间异步调用它。
     */

    WKNavigationResponsePolicy responsePolicy = WKNavigationResponsePolicyAllow;
    NSLog(@"333333");
    decisionHandler(responsePolicy);

}
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation{

    NSLog(@"22222222当Web内容开始在Web视图中加载时调用");

}
-(void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{
    
    NSLog(@"44444当Web视图开始接收Web内容时调用");

}
-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
    
    NSLog(@"55555导航完成时调用。");

}

-(void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error{

    NSLog(@"加载错误时候才调用,错误原因=%@",error);
    
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end

相关文章

网友评论

    本文标题:WKWebView基础使用与WKNavigationDelega

    本文链接:https://www.haomeiwen.com/subject/uitjqxtx.html