WKWebView基础使用
本文主要讲解WKWebView基础使用,同时加入了自己对WKNavigationDelegate的理解。
也不知道对不对,就是说得简单点。希望可以帮助更多人。
注意添加
import <WebKit/WebKit.h>
如果哪里理解错误,请一定留言指出。
源代码点击下载(编写环境Xcode8.3)
如果直接新建目录,复制本文代码,粘贴无法正常加载的朋友.可以参考这个看看有没有配置为YES
![](https://img.haomeiwen.com/i2771540/d869335cd84bf372.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
网友评论