一、概述
WKWebView是ios 8 以后出来的,是为了解决UIWebView卡慢,占用内存过大的问题。
在以往时候,如果用UIWebView加载加载网页的时候,卡慢现象会很严重,有时候往往会卡到一个页面无法动弹,空白屏时间过长,基本上没有什么体验可言;
WebKit中的WKWebView控件的新特性和使用方法,较好的解决了卡、慢、占用内存过大的问题。而且支持了更多HTML5的特性,还有JS库的加载和使用,功能比UIWebView强大了很多。
如上图所示,WebKit框架中最核心的类应该属于WKWebView了,这个类专门用来渲染网页视图,其他类和协议都将基于它和服务于它。
WKWebView:网页的渲染与展示,通过WKWebViewConfiguration可以进行自定义配置。
WKWebViewConfiguration:这个类专门用来配置WKWebView。
WKPreference:这个类用来进行相关webView设置。
WKProcessPool:这个类用来配置进程池,与网页视图的资源共享有关。
WKUserContentController:这个类主要用来做native与JavaScript的交互管理。
WKUserScript:用于进行JavaScript注入。
WKScriptMessageHandler:这个类专门用来处理JavaScript调用native的方法。
WKNavigationDelegate:网页跳转间的导航管理协议,这个协议可以监听网页的活动。
WKNavigationAction:网页某个活动的示例化对象。
WKUIDelegate:用于交互处理JavaScript中的一些弹出框。
WKBackForwardList:堆栈管理的网页列表。
WKBackForwardListItem:每个网页节点对象。
二、WKWebView的优势
1.交互更方便
2.更低的内存占用
3.高达60fps的滚动刷新率以及内置手势
4.支持更多的HTML5特性
5.基于webkit内核,支持Nitro JavaScript引擎
6.提供常用的属性,如加载网页进度的属性estimatedProgress
三、UIWebView的使用
@property (nonatomic, strong) UIWebView *myWebView;
3.1 初始化webview
self.myWebView=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
self.myWebView.delegate=self;
//添加webview到当前viewcontroller的view上
[self.view addSubview:self.myWebView];
3.2 加载http url地址
NSString *httpStr=@"https://www.baidu.com";
NSURL *httpUrl=[NSURL URLWithString:httpStr];
NSURLRequest *httpRequest=[NSURLRequest requestWithURL:httpUrl];
[self.myWebView loadRequest:httpRequest];
3.3 加载本地html文件
// 本地HTML文件路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"map" ofType:@"html"];
NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
// 创建带参数的URL
NSURL *url = [NSURL fileURLWithPath:path];
NSURL *urlWithParams = [NSURL URLWithString:[url absoluteString] relativeToURL:baseURL];
NSString *result = [NSString stringWithFormat:@"?latitude=%@&longitude=%@", @"121.469170", @"31.22436"];
NSURL *finalURL = [NSURL URLWithString:[[urlWithParams absoluteString] stringByAppendingFormat:result]];
// 加载URL
NSURLRequest *request = [NSURLRequest requestWithURL:finalURL];
[self.myWebView loadRequest:request];
四、WKWebView的使用
首先需要引入头文件
#import <WebKit/WebKit.h>
加载url地址:
WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.baidu.com"]]];
[self.view addSubview:webView];
加载本地html文件:
NSString *path = [[NSBundle mainBundle] pathForResource:@"map" ofType:@"html"];
NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
[webView loadFileURL:[NSURL fileURLWithPath:path] allowingReadAccessToURL:baseURL];
结语
UIWebView和WKWebView都是在iOS开发中常用的WebView控件。然而,随着iOS版本的升级,WKWebView逐渐成为主流,因为它提供了更好的性能、更多的功能和更好的兼容性。
UIWebView和WKWebView是iOS开发中常用的WebView控件,用于在应用中显示网页内容。通过正确使用和选择合适的WebView控件,我们可以提供更好的用户体验和更好的应用性能。
通过本文的介绍和示例,你应该对UIWebView和WKWebView有了初步的了解。UIWebView适用于较旧的iOS版本和简单的网页加载场景,而WKWebView适用于较新的iOS版本和更复杂的网页加载需求。
在实际开发中,除了加载网页内容,WebView还可以实现更多的功能,如与网页交互、处理JavaScript回调等。对于更复杂的WebView需求,你可以进一步学习和探索相关的知识和技术,如与JavaScript的交互、WebView的缓存和优化等。
无论你选择使用UIWebView还是WKWebView,都需要注意以下几点:
优化网页加载性能:尽量使用本地缓存、减少网络请求和资源加载,以提高网页加载速度和用户体验。
处理WebView事件:通过实现相应的代理方法或监听WebView事件,处理加载完成、加载失败、页面跳转等事件,以提供更好的用户反馈和交互。
安全性考虑:WebView可能面临一些安全风险,如XSS攻击、点击劫持等。确保加载的网页内容可信,并采取相应的安全措施,以保护用户的隐私和应用的安全。
希望通过本文的介绍,你对UIWebView和WKWebView有了更深入的了解,并能够在实际开发中选择和使用合适的WebView控件。愿你在iOS开发中取得更大的成功,并为用户提供出色的应用体验!
全部评论