ios开发之--WKWebView和UIWebView的使用

86人浏览 / 0人评论 / 添加收藏

一、概述

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开发中取得更大的成功,并为用户提供出色的应用体验!
 

 

全部评论